skrjs's Studio.

Curl常用命令

2022/03/21

Curl 常用命令

curl 简介

curl 即 client URL 的简写,使用 shell 命令来发送 URL 请求。

curl 默认请求命令

最基础的 curl 默认请求命令:

1
curl www.skrjs.com

curl 设置 Headers(请求标头)

-H 参数用来直接设置 Request Headers 中的字段。

添加 Content-Type 字段:

1
curl -H 'Content-Type: application/json' http://skrjs.com

同时添加多个字段:

1
culr -H 'Content-Type: application/json' -H 'Accept-Language: zh-CN' http://skrjs.com

curl 设置 Headers 中的 User-Agent(用户代理标头)

-A 参数指定客户端的用户代理标头,即 Request Headers 中的 User-Agent,默认 curl 请求用户代理标头值为 curl/[version] 。

将 User-Agent 设置成 Chrome 浏览器:

1
curl -A 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.100 Safari/537.36' http://skrjs.com

移除 User-Agent :

1
curl -A '' http://skrjs.com

-A 为设置 User-Agent 标头,也可以通过 -H 直接设置 Request Headers:

直接使用 -H 来添加,达到同样效果:

1
curl -H 'User-Agent: xxxx' http://skrjs.com

curl 设置 headers 中的 Referer(来源)

-e 设置 headers 中的 Referer(请求的来源)。

设置 Referer:

1
curl -e 'https://www.baidu.com/' http://skrjs.com

直接使用 -H 来添加,达到同样效果:

1
curl -H 'Referer:https://www.baidu.com' http://skrjs.com

curl 设置请求随服务器重定向

-L 参数会让请求跟随服务器的重定向。例如之前举得例子:curl www.skrjs.com,由于服务器上会进行 http 跳转至 https,首先返回 304,然后将网址跳转至 https://www.skrjs.com,若添加 -L 参数则可让请求返回重定向后的网页内容。

设置请求跟随重定向:

1
curl -L www.skrjs.com

此时会返回重新定向后的 https://www.skrjs.com 的内容

-b 参数用来向请求中携带 cookie。

携带 1 个 cookie 参数:

1
curl -b 'uname=skrjs' http://skrjs.com

携带多个 cookie 参数:

1
curl -b 'uname=skrjs;id=px1986' http://skrjs.com

2 个参数之间使用 分号(;) 连接

读取并携带本地 cookie.txt 文件内容:

1
curl -b cookie.txt http://skrjs.com

接收并写入本地 cookie.txt 文件内容:

1
curl -c cookie.txt http://skrjs.com

curl 设置请求方式

-X 参数用来设置请求方式。默认不设置,请求方式为 GET 。

设置为 POST 请求方式:

1
curl -X POST http://skrjs.com

curl 使用 POST 请求

-d 参数用来设置发送 POST 请求的数据体。注意:若使用了 -d 参数,则自动会在请求 headers 中添加:Content-Type: application/x-www-form-urlencoded,并且自动将请求方式转为 POST,因此无需额外设置 -X POST 。

注意:-d 参数默认是不会对数据体进行 URL 编码的
例如:curl -d 'msg=hello world' http://skrjs.comhello world中的空格可能会造成数据错误。

设置请求数据体:

1
curl -d 'uid=skrjs&pwd=123456' http://skrjs.com/login

或者将多个数据体中的字段单独定义

1
curl -d 'uid=skrjs' -d 'pwd=123456' http://skrjs.com/login

读取本地文件内容作为数据体:

1
curl -d '@data.txt' http://skrjs.com/login

注意要在 data.txt 文件前面加上 @ 符号以表示这个为文件路径

设置数据体并自动 URL 转码:

–data-urlencode 参数等同于 -d,并且会自动将数据进行 URL 转码。

1
curl --data-urlencode 'msg=hello world' http://skrjs.com/write

POST 发送 JSON 数据:

除了设置数据体,重点还要设置 headers 中 Content-Type 的值。

1
curl -d '{"uid":"skrjs","pwd":"123456"}' -H 'Content-Type : application/json' http://skrjs.com/login

curl 构造 GET 请求参数

curl 默认即 GET 请求方式,例如:curl http://skrjs.com/search?a=2&b=3 ,但是也可以通过 -G -d 结合形式来构造 GET 请求参数。

构造 GET 请求参数:

1
curl -G -d 'a=2;b=3' http://skrjs.com/search

1
curl -G -d 'a=2' -d 'b=3' http://skrjs.com/search

上述代码最终执行效果,等同于:curl http://skrjs.com/search?a=2&b=3

原本 -d 参数会让请求自动变为 POST,但是加上 -G 之后会让请求方式变为 GET,并且 数据体 自动构建成 GET 请求的参数。

再次提醒:-d 并不会进行参数 URL 转码,因此如果使用 -G ,更多时候应该使用 –data-urlencode 。

curl 上传文件

-F 参数用来设置向服务器上传二进制文件。

上传二进制文件:

1
curl -F 'file=@aa.jpg' http://skrjs.com/upload

默认会自动给 headers 中添加:Content-Type: multipart/form-data,然后将文件 aa.jpg 作为 file 字段上传。

指定 MIME 类型:

1
curl -F 'file=@aa.jpg;type=image/jpg' http://skrjs.com/upload

指定文件名:

1
curl -F 'file=@aa.jpg;filename=bb.jpg' http://skrjs.com/upload

上述命令中,原始文件名为 aa.jpg,但是服务器接收到的文件名为 bb.jpg

curl 打印返回信息头(Respone Headers)

-i 参数打印出服务器返回信息头(respone headers)。

先打印出返回信息头,再打印出网页内容:

1
curl -i http://skrjs.com

会先打印出返回信息头,然后空一行,再打印出网页内容

仅引出返回信息头,不打印网页内容:

1
curl -I http://skrjs.com

–head 等同于 -I,因此上述命令也可以写成:

1
curl --head http://skrjs.com

curl 跳过 SSL 检测

-k 参数可以指定跳过 SSL 检测,不会去检查服务器 SSL 证书是否正确。

跳过 SSL 检测:

1
curl -k http://skrjs.com

curl 模拟网速带宽

–limit-rate 用来限制 请求和回应 的网速(网络带宽),可以模拟出网速不好的情况。

模拟限制网速带宽:

1
curl --limit-rate 200k http://skrjs.com

模拟每秒 200k 的带宽情况下的请求和回应

curl 保存文件

-o 参数将服务器回应的内容保存成文件,等同于 wget 命令。

以 xxx.xx 名字保存文件:

1
curl -o index.html http://skrjs.com

上述命令会将网页返回内容保存为 index.html 文件。

直接保存文件:

-O 参数将服务器回应的内容保存成文件,并且将 URL 的后面部分直接当做文件名。

1
curl -O http://skrjs.com/me.jpg

会直接将文件以 me.jpg 的名字保存到本地

文件保存位置:论使用哪种保存参数,文件保存目录均为 终端 shell 命令中 当前所在的目录。

curl 控制输出信息

默认情况下,curl 若不发生错误 则输出返回的网页内容,若发生错误,则输出错误信息。

仅输出正确的返回信息,不输出错误和进度信息:

-s 参数将设置不输出错误和进度信息。

1
curl -s http://skrjs.com

因为添加有 -s ,即使请求发生错误也不输出任何错误信息。

仅输出错误信息,不输出正确的返回信息:

-S 参数将设置仅输出错误信息

1
curl -S http://skrjs.com

设置不输出任何信息(错误信息和正常的返回信息):

-o /dev/null 参数将设置不输出任何信息

1
curl -s -o /dev/null http://skrjs.com

上述命令,无论 curl 是否遇到错误,均不输出任何信息

curl 设置服务器认证信息(用户名和密码)

-u 参数用来设置服务器认证的用户名和密码

设置服务器认证信息:

1
curl -u 'skrjs:123456' http://skrjs.com/login

补充说明:

  1. 用户名和密码之间,使用冒号(:)分割连接。
  2. 自动会在请求 headers 中添加:Authorization: Basic Ym9iOjEyMzQ1

识别 URL 中的用户名和密码:

curl 会自动识别 URL 中的用户名和密码,格式为:用户名:密码@URL,例如:

1
curl https://skrjs:123456@skrjs.com/login

后期补齐密码:

1
curl -u 'skrjs' http://skrjs.com/login

上述命令只设置了用户名,执行后,curl 会提示需要输入密码,注意此时输入密码时,为了密码安全,是不会有任何输入光标变动提示的(无法看到已输入密码长度)。

curl 通信过程中的调试

-v 参数输出通信的整个过程,用于调试。

调试更新整个过程:

1
curl -v http://skrjs.com

会打印出请求过程中的一些细节,例如 请求对应的 IP 地址、request headers、respone headers 等

显示接收到的二进制数据:

–trace - 参数可以打印出接收数据过程中的原始二进制数据

1
curl --trace - http://skrjs.com

curl 设置请求代理

-x 参数用来指定请求的代理。

设置请求代理:

1
curl -x socks5://skrjs:123456@xxxx.com:8080 http://skrjs.com

通过请求 xxxx.com:8080 的 socks5 代理发出请求。

如果没有指定代理协议,默认为 http 协议,例如:

1
curl -x skrjs:123456@xxxx.com:8080 http://skrjs.com

上面的请求中,会使用默认的 http 协议作为代理协议,等同于:curl -x http://skrjs:123456@xxxx.com:8080 http://skrjs.com

CATALOG
  1. 1. Curl 常用命令
    1. 1.1. curl 简介
    2. 1.2. curl 默认请求命令
    3. 1.3. curl 设置 Headers(请求标头)
    4. 1.4. curl 设置 Headers 中的 User-Agent(用户代理标头)
    5. 1.5. curl 设置 headers 中的 Referer(来源)
    6. 1.6. curl 设置请求随服务器重定向
    7. 1.7. curl 发送和保存 cookie
    8. 1.8. curl 设置请求方式
    9. 1.9. curl 使用 POST 请求
    10. 1.10. curl 构造 GET 请求参数
    11. 1.11. curl 上传文件
    12. 1.12. curl 打印返回信息头(Respone Headers)
    13. 1.13. curl 跳过 SSL 检测
    14. 1.14. curl 模拟网速带宽
    15. 1.15. curl 保存文件
    16. 1.16. curl 控制输出信息
    17. 1.17. curl 设置服务器认证信息(用户名和密码)
    18. 1.18. curl 通信过程中的调试
    19. 1.19. curl 设置请求代理