Curl 使用指南

标签: dev | 发表时间:2021-05-07 00:00 | 作者:
出处:http://itindex.net/relian

CURL使用指南

Curl 是一个常用的命令行数据传输工具,可以方便的从命令行创建网络请求。它支持众多协议,支持如 HTTP, HTTPS, FTP, FTPS, SFTP, IMAP, SMTP, POP3 等等协议。Curl 提供了很多强大的功能,我们可以利用它来进行 HTTP 请求、上传/下载文件等,且支持 Cookie、用户密码验证、代理隧道、限速等。

Curl 用于上传和下载指定 URL 的数据,它是一个客户端(client-side)工具,一个客户端 URL 工具。这也是它的名字的由来。

它是调试网络请求的好工具,本文将介绍它的一些常用功能及参数。如果你的电脑还没有安装它,可以看看它的官方下载指引文档: how to install curl

发起一个 HTTP GET 请求

当使用 curl 命令直接访问一个网址时,将发起一个 GET 请求,然后返回响应体。

    curl https://www.liuxing.io

在命令行运行以上命令将返回,所访问 liuxing.io页面源码。

重定向跟踪 (-L)

当请求一个 URL 返回 301 之类的重定向响应时,可以使用 -L参数来自动重定向跟踪响应头里的 Location时。

    curl liuxing.io

在该网址设置了 301 重定向到 https 版 https://www.liuxing.io。上面的示例不会自动完成重定向追踪。但我们可以使用以下命令:

    curl -L liuxing.io

储存响应体到文件 (-O)

使用 -o参数指定文件名,可以将响应结果储存到文件中

    curl -o liuxing.io.html https://www.liuxing.io

还可以使用 -O参数直接用服务器上的文件名保存在本地

    curl-Ohttps://www.liuxing.io/index.html

获取 HTTP 响应头 (-i)

使用 -i参数可以参看请求 URL 的响应头。

    curl -i https://www.liuxing.io

添加了 -i参数,URL 的响应头将与响应体一起返回打印出来。

如果只想获取响应头,可以使用 -I参数。

    curl -I https://www.liuxing.io

构造 GET 查询参数 (-G)

在发起 GET 请求时,可能我们需要在 URL 后面跟上查询参数,如 https://www.google.com/search?q=刘星的个人网站

可以通过 -G参数来构造 URL 的查询字符串

    curl -G -d'q=liuxing'https://www.google.com/search

上面的示例会将请求参数与请求 URL 拼接然后发出请求,请求地址为 https://www.google.com/search?q=liuxing。注意:如果忘记了 -G参数,curl 会发出 POST 请求。

如果数据需要 URL 编码,可以结合使用 --data--urlencode参数。

    curl -G --data-urlencode'q=CURL 刘星的个人网站'https://www.google.com/search

改变 User Agent (-A)

User Agent 即用户代理,简称 UA,它使得服务器能够识别客户使用的操作系统及版本、CPU 类型、浏览器及版本、浏览器渲染引擎、浏览器语言等。默认情况下,curl 发送的 User Agent 为 curl/<version>,例如:curl/7.64.1。

可以使用 -A指定 User Agent 为其他值。

    curl -A'my-user-agent'https://www.liuxing.io

如果你尝试了请求前面的【构造 GET 查询参数】的示例,你会发现 Google 拒绝了我们的请求。现在加上一个浏览器的 User agent 请求一次就能得到正常返回结果。

    curl -G --data-urlencode'q=CURL 刘星的个人网站'-A"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.93 Safari/537.36"https://www.google.com/search

添加 Referrer (-e)

使用 -e参数用来设置 HTTP 请求头的 Referer,表示请求的来源。

    curl -e'https://www.liuxing.io/blog/curl'https://www.liuxing.io

携带 Cookie 请求数据 (-b)

使用 -b参数来向服务器发送 Cookie,可以直接接受 Cookie 字符串或者存储了 Cookie 的文件。

    curl -b'foo=bar'https://www.liuxing.io

或者

    curl -b ./cookies.txt https://www.liuxing.io

该命令会生成一个 Cookie: foo=bar的 Cookie 请求头发送给目标 URL。

使用 -c参数可以将目标 URL 携带的 Cookie 写入到一个文件里。

    curl -c cookies.txt https://www.liuxing.io

上面的命令可以将目标 URL https://www.liuxing.io的 Cookie 保存到 cookies.txt 文件中

添加 HTTP 请求头 (-H)

curl 可以通过 -H key:value的方式添加 HTTP 请求头,要设置多个请求头,可以通过添加多个 -H参数实现。

    curl -H'Accept-Language: en-US'https://www.liuxing.io

前面介绍的 User agent 以及 Cookie 也是一个请求头,也可以通过-H 的方式设置在请求头中。

    curl -H'User-Agent: my-user-agent'https://www.liuxing.io

curl -H'Cookie: foo=bar'https://www.liuxing.io

发送一个 HTTP POST 请求

默认情况下,curl 发送的是 GET 请求。要使其发送 POST 请求,需要使用 -X POST命令行参数。

    curl -X POST https://httpbin.org/post

更改 HTTP 请求方法 (-X)

-X参数可以用来更改 HTTP 请求方法, -X POST将发起 POST 请求, -X PUT将发起 PUT 请求。

添加 POST 数据到请求中 (-d)

要将 POST 数据添加到请求中,需要使用 -d参数。

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

    curl -d'login=liuxing&password=123456'https://httpbin.org/post

发送 JSON 数据

现在 JSON 是非常流行的数据格式,当发起请求时,你可能希望发送 JSON 格式的数据。在这种情况下,需要使用 -H参数来设置 Content-Type请求头。

    curl -d'{"option": "value", "something": "anothervalue"}'-H"Content-Type: application/json"-X POST https://httpbin.org/post

还可以使用 @直接读取本地 JSON 文件的内容,来发起请求

    curl -d"@my-file.json"-X POST https://httpbin.org/post

HTTP 认证 (-u)

如果目标 URL 需要 HTTP Basic Authentication,可以通过 -u参数传递 user:password来鉴权

    curl -u user:pass http://httpbin.org/basic-auth/user/pass

打印请求的详细日志 (-v)

使用 -v参数可以打印出 curl 请求的所有请求与响应详细日志。它是 --verbose的简写。

    curl -v -I https://www.liuxing.io

输出为:

    $ curl --verbose -I https://www.liuxing.io
*   Trying 104.21.80.225...
* TCP_NODELAYset*   Trying 2606:4700:3036::ac43:9a86...
* TCP_NODELAYset* Connected to www.liuxing.io (104.21.80.225) port443(#0)* ALPN, offering h2
* ALPN, offering http/1.1
* successfullysetcertificate verify locations:
*   CAfile: /etc/ssl/cert.pem
  CApath: none
* TLSv1.2 (OUT), TLS handshake, Client hello (1):
* TLSv1.2 (IN), TLS handshake, Server hello (2):
* TLSv1.2 (IN), TLS handshake, Certificate (11):
* TLSv1.2 (IN), TLS handshake, Server key exchange (12):
* TLSv1.2 (IN), TLS handshake, Server finished (14):
* TLSv1.2 (OUT), TLS handshake, Client key exchange (16):
* TLSv1.2 (OUT), TLS change cipher, Change cipher spec (1)
...

限制 HTTP 带宽 (–limit-rate)

默认情况下,curl 使用最大可用带宽,但是通常我们需要放慢速度进行测试。可以使用 --limit-rate来限制 curl 的请求和响应的带宽,让请求与响应变慢。

    curl --limit-rate 200k https://www.liuxing.io

上面的命令将 curl 限制在每秒 200K 字节。

参考链接

相关 [curl] 推荐:

Curl 使用指南

- - IT瘾-dev
Curl 是一个常用的命令行数据传输工具,可以方便的从命令行创建网络请求. 它支持众多协议,支持如 HTTP, HTTPS, FTP, FTPS, SFTP, IMAP, SMTP, POP3 等等协议. Curl 提供了很多强大的功能,我们可以利用它来进行 HTTP 请求、上传/下载文件等,且支持 Cookie、用户密码验证、代理隧道、限速等.

curl网站开发指南

- Andy - 阮一峰的网络日志
我一向以为,curl只是一个编程用的函数库. 最近才发现,这个命令本身,就是一个无比有用的网站开发工具,请看我整理的它的用法. curl是一种命令行工具,作用是发出网络请求,然后得到和提取数据,显示在"标准输出"(stdout)上面. 它支持多种协议,下面举例讲解如何将它用于网站开发. 直接在curl命令后加上网址,就可以看到网页源码.

PHP,CURL和你的安全!

- - WebHek
如果最近你在美国看电视,你会经常看到一个广告——一个和蔼友善的家伙说“我希望我的电脑被病毒感染”,“我希望所有我家的照片都被人删除,找不回来. ”或“我希望我的笔记本运转的声音听起来像打雷. 当然,没有一个正常人希望遇到这样的痛苦,但如果你不对自己的电脑采取保护措施,结果就是让黑客得逞. 你需要理解,这就像在你家里,车或钱袋子,你不能让它们都敞着口放在外面,你不能认为陌生路人都是可信的.

使用curl来调试你的应用

- - SegmentFault 最新的文章
我们在客户端开发过程中总免不了和后端进行api对接,有时候需要对返回的数据格式进行调试,有时候每次运行客户端来发送请求,这个未免效率太低,这里就来介绍一个好用的工具--curl. curl是一个向服务器传输数据的工具,它支持http、https、ftp、ftps、scp、sftp、tftp、telnet等协议,这里只针对http进行讲解一些常用的用法,具体安装请自行搜索.

Google 正在实现自己的 curl

- - 最新更新 – Solidot
curl 开发者 Daniel Stenberg 称, Google 正在实现自己的 curl. Google 使用 Chromium 的网络协议栈 Cronet 去实现名为 libcrurl 的库,并将提供 libcurl API. Google 将使用自己的库去创造自己的 curl 工具.

Let's make a SOAP request from command line(curl)?

- -
There could be a chance where you need to make a request from your command line rather than installing a tool such.

使用 curl 指令對網站測試載入速度

- - SSORC.tw
編輯一個檔案 cross.txt. 參考 How to Test Website Loading Speed in Linux. 這篇文章 使用 curl 指令對網站測試載入速度 最早出現於 SSORC.tw.

使用 curl 命令分析请求的耗时情况

- - 小决的专栏
最近工作中遇到一个问题,某个请求的响应特别慢,因此我就希望有一种方法能够分析到底请求的哪一步耗时比较长,好进一步找到问题的原因. 在网络上搜索了一下,发现了一个非常好用的方法, curl 命令就能帮助分析请求的各个部分耗时情况. curl 命令提供了 -w 参数,这个参数在 manpage 是这样解释的:.