curl命令

curl是Linux下的一款常用的命令行工具,可以用来上传和下载 URL 指定的数据,请求 WEB 服务器等。

目前,curl 工具已经支持超过 200 多个选项,通过

命令可以看到这些选项。如果想了解这些选项的详细信息,可以通过以下命令:

一些常用选项与参数如下。

不带参数时,curl 就是发出 GET 请求:

其他的常用选项如下:

-A

指定客户端的用户代理标头,即User-Agent,curl默认的的用户代理字符串是 “curl/7.65.3”,其中7.65.3 是 curl 的版本,可以通过 curl -V 或 curl –version 查看。
通过 -A 选项可以指定不同的用户代理标头,例如将 User-Agent 改成是 Chrome 浏览器:

或者移除标头:

-b

向服务器发送Cookie,可以直接指定表示 cookie 的字符串,也可以从指定的文件中读取出来发送给服务器。

-c

将服务器设置的 cookie 写入指定文件,例如,将 www.baidu.com 服务器回应的 cookie 写入 cookie.txt 文件中:

-d

发送 POST 请求的数据。

或者

使用-d参数以后,HTTP 请求会自动加上标头 “Content-Type : application/x-www-form-urlencoded”,并且会自动将请求转为 POST 方法

另外,-d 也可以读取本地文本文件中的数据,向服务器发送,例如,创建data.txt 文件,内容为

之后执行以下命令:

以上三个命令的执行效果是一样的,得到数据如下:

与 -d 选项的作用相同,区别是该选项会自动将发送的数据进行URL编码。

跟踪数据如下,可以看到发送的数据是被编码的:

-e

设置 HTTP 的标头Referer,表示请求的来源。

可以看到跟踪数据中的 referer:

-F

向服务器上传二进制文件。

该命令会给 HTTP 请求加上标头Content-Type: multipart/form-data,然后将文件svg.png作为file字段上传。

另外,-F 选项也可以指定 MIME 的类型,例如:

得到跟踪数据如下:

更多不同的 MIME 类型可以参考网站:
https://www.iana.org/assignments/media-types/media-types.xhtml

另外,-F 选项也可以指定服务器端接收到的文件名:

即上传的原文件名为svg.png,但服务器接收到的文件名为 svg2.png(而上文的跟踪数据中可以看到,在没有特别指定时,服务器收到的文件名就是上传时候的文件名),跟踪数据如下:

-G

该选项用来构造 URL 的查询字符串,发出一个 GET 请求。如果省略该选项,则会发出一个 POST 请求。例如:

该命令会发出一个 GET 请求,实际请求的 URL 为

跟踪数据如下:

如果不加 -G 选项,则会发出一个 POST 请求,可参考前文。

-H

添加 HTTP 请求的标头,可以同时使用多个 -H 选项,添加多个标头:

该命令添加两个标头,跟踪数据如下:

-i

该选项打印出服务器回应的 HTTP 标头。

该命令先打印出服务器回应的 HTTP 标头,再打印网页的源码:

-I

该选项向服务器发送 HEAD 请求,并显示服务器返回的标头。

-k

连接服务器时跳过 SSL 检查,可以通过非安全方式连接,不检查服务器的 SSL 证书是否正确。

-L

该选项会让 HTTP 请求跟随服务器的重定向(curl 默认不跟随重定向)。

使用 -L 选项和不使用 -L 选项,二者的输出不同。

–limit-rate

限制 HTTP 请求和回应的带宽,模拟慢网速的环境。

该命令将访问网页的带宽限制在10k字节。

-M

显示 curl 的完整详细用法,该选项比 –help 显示的帮助信息更详细。
使用该选项相当于在命令行执行 man curl 命令。

-m

允许传输的最大时间,单位是“秒”。

-n

必须读取 .netrc 文件中的用户名与密码。

将指定的文件名代替 .netrc 文件。

-o

该选项将服务器回应的内容保存成文件,等同于 wget 命令。

-O

该选项将服务器回应的内容保存成文件,并将 URL 的最后部分当作文件名,例如:

该命令下载CentOS系统的镜像文件,并将指定 URL 的最后一部分作为下载后的镜像的文件名。

-r

只接收服务器回应的 范围内的数据,例如:

该命令只接收了服务器返回的前 100 个字节。

-s

静默模式,不输出错误和进度信息。

该命令会下载CentOS系统的镜像文件,但不会有任何输出。

-S

该选项要求输出错误信息,即使 -s 选项指定也会输出。例如:

-T

将本地文件传输给服务器。

-u

用来设置服务器认证的用户名与密码。

该命令设置用户名为 emma,密码设置为 123456,然后将其转为 HTTP 标头 “Authorization: Basic ZW1tYToxMjM0NTY=”。跟踪数据如下:

如果在命令中只指定用户名,则会在命令执行后,先提示用户输入密码,之后执行命令的过程与上文相同:

-v

该选项输出通信的整个过程,一般用于调试:

-x

指定 HTTP 请求使用的代理,例如:

该命令指定 HTTP 请求通过 socks5 协议的代理 myproxy.com:8080 来访问页面。如果没有指定协议类型,则默认使用 HTTP 代理:

该命令使用 HTTP 协议的代理访问页面。

-X

指定 HTTP 请求的方法,如GET、POST等,大部分情况下通常不需要使用该选项。

-Y

当传输速度小于指定速度时,停止传输。

-y

在命令执行了指定时间之后,触发“speed-limit”。

参考:

————————————————————

原创文章,转载请注明: 转载自孙希栋的博客

本文链接地址: 《curl命令》

发表评论

电子邮件地址不会被公开。 必填项已用*标注

Scroll Up