curl 命令总结

本文详细介绍cURL命令的各种用法,包括获取页面内容、显示HTTP头、保存文件、跟随重定向、自定义User-Agent和Header、读取和保存Cookie、发送POST请求等。适合初学者快速掌握cURL的基本操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  1. 获取页面内容
    当我们不加任何选项使用 curl 时,默认会发送 GET 请求来获取链接内容到标准输出。

curl http://0.0.0.0:8081
2. 显示 HTTP 头
如果我们只想要显示 HTTP 头,而不显示文件内容,可以使用 -I 选项:

curl -I http://0.0.0.0:8081
输出为:

HTTP/1.1 200 OK
Server: nginx/1.10.3
Date: Thu, 11 May 2017 08:24:45 GMT
Content-Type: text/html; charset=utf-8
Content-Length: 24206
Connection: keep-alive
X-Powered-By: Express
Cache-Control: public, max-age=0
ETag: W/“5e8e-Yw5ZdnVVly9/aEnMX7fVXQ”
Vary: Accept-Encoding
也可以同时显示 HTTP 头和文件内容,使用 -i 选项:

curl -i http://0.0.0.0:8081
输出为:
[root@localhost nos]# curl -i get http://192.168.29.129:8081
curl: (6) Could not resolve host: get; Unknown error
HTTP/1.1 200 OK
Connection: close
Content-Type: application/xml;charset=UTF-8
Date: Tue, 24 Sep 2019 07:42:56 GMT
Server: ngx_openresty/1.4.3.6
X-Nos-Request-Id: tx59cde61a176c47adb9abb-005d89c900
Transfer-Encoding: chunked

<?xml version="1.0" encoding="UTF-8"?> 3d3c4712b60132f2a506357a5f57e404 SY CHH 2019-09-19T08:41:35.865420 CHH1 2019-09-03T15:03:33.197720 CHH1eee
  1. 将链接保存到文件
    我们可以使用 > 符号将输出重定向到本地文件中。

curl http://0.0.0.0:8081 > index.html
也可以通过 curl 自带的 -o/-O 选项将内容保存到文件中。

-o(小写的 o):结果会被保存到命令行中提供的文件名
-O(大写的 O):URL 中的文件名会被用作保存输出的文件名
curl -o index.html http://0.0.0.0:8081
curl -O http://0.0.0.0:8081/page/2/
注意:使用 -O 选项时,必须确保链接末尾包含文件名,否则 curl 无法正确保存文件。如果遇到链接中无文件名的情况,应该使用 -o 选项手动指定文件名,或使用重定向符号。

  1. 同时下载多个文件
    我们可以使用 -o 或 -O 选项来同时指定多个链接,按照以下格式编写命令:

curl -O http://0.0.0.0:8081/page/2/ -O http://0.0.0.0:8081/page/3/
或者:

curl -o page1.html http://0.0.0.0:8081/page/1/ -o page2.html http://0.0.0.0:8081/page/2/
5. 使用 -L 跟随链接重定向
如果直接使用 curl 打开某些被重定向后的链接,这种情况下就无法获取我们想要的网页内容。例如:

curl http://0.0.0.0:8081
会得到如下提示:

301 Moved Permanently

301 Moved Permanently


nginx/1.10.3
而当我们通过浏览器打开该链接时,会自动跳转到 http://0.0.0.0:8081。此时我们想要 curl 做的,就是像浏览器一样跟随链接的跳转,获取最终的网页内容。我们可以在命令中添加 -L 选项来跟随链接重定向:

curl -L http://0.0.0.0:8081
这样我们就能获取到经过重定向后的网页内容了。

  1. 使用 -A 自定义 User-Agent
    我们可以使用 -A 来自定义用户代理,例如下面的命令将伪装成安卓火狐浏览器对网页进行请求:

curl -A “Mozilla/5.0 (Android; Mobile; rv:35.0) Gecko/35.0 Firefox/35.0” http://0.0.0.0:8081
下面我们会使用 -H 来实现同样的目的。

  1. 使用 -H 自定义 header
    当我们需要传递特定的 header 的时候,可以仿照以下命令来写:

curl -H “Referer: 0.0.0.0:8081” -H “User-Agent: Custom-User-Agent” http://0.0.0.0:8081
可以看到,当我们使用 -H 来自定义 User-Agent 时,需要使用 “User-Agent: xxx” 的格式。

我们能够直接在 header 中传递 Cookie,格式与上面的例子一样:

curl -H “Cookie: JSESSIONID=D0112A5063D938586B659EF8F939BE24” http://0.0.0.0:8081
另一种方式会在下面介绍。

  1. 使用 -c 保存 Cookie
    当我们使用 cURL 访问页面的时候,默认是不会保存 Cookie 的。有些情况下我们希望保存 Cookie 以便下次访问时使用。例如登陆了某个网站,我们希望再次访问该网站时保持登陆的状态,这时就可以现将登陆时的 Cookie 保存起来,下次访问时再读取。

-c 后面跟上要保存的文件名。

curl -c “cookie-example” http://0.0.0.0:8081
9. 使用 -b 读取 Cookie
前面讲到了使用 -H 来发送 Cookie 的方法,这种方式是直接将 Cookie 字符串写在命令中。如果使用 -b 来自定义 Cookie,命令如下:

curl -b “JSESSIONID=D0112A5063D938586B659EF8F939BE24” http://0.0.0.0:8081
如果要从文件中读取 Cookie,-H 就无能为力了,此时可以使用 -b 来达到这一目的:

curl -b “cookie-example” http://0.0.0.0:8081
即 -b 后面既可以是 Cookie 字符串,也可以是保存了 Cookie 的文件名。

  1. 使用 -d 发送 POST 请求
    我们以登陆网页为例来进行说明使用 cURL 发送 POST 请求的方法。假设有一个登录页面 0.0.0.0:8081/login,只需要提交用户名和密码便可登录。我们可以使用 cURL 来完成这一 POST 请求,-d 用于指定发送的数据,-X 用于指定发送数据的方式:

curl -d “userName=tom&passwd=123456” -X POST http://0.0.0.0:8081/login
在使用 -d 的情况下,如果省略 -X,则默认为 POST 方式:

curl -d “userName=tom&passwd=123456” http://0.0.0.0:8081/login
强制使用 GET 方式

发送数据时,不仅可以使用 POST 方式,也可以使用 GET 方式,例如:

curl -d “somedata” -X GET http://0.0.0.0:8081/api
或者使用 -G 选项:

curl -d “somedata” -G http://0.0.0.0:8081/api
从文件中读取 data

curl -d “@data.txt” http://0.0.0.0:8081/login
带 Cookie 登录

当然,如果我们再次访问该网站,仍然会变成未登录的状态。我们可以用之前提到的方法保存 Cookie,在每次访问网站时都带上该 Cookie 以保持登录状态。

curl -c “cookie-login” -d “userName=tom&passwd=123456” http://0.0.0.0:8081/login
再次访问该网站时,使用以下命令:

curl -b “cookie-login” http://0.0.0.0:8081/login
这样,就能保持访问的是登录后的页面了。

1.访问http页面内容,输出到标准输出 curl http://www.neocanable.com 2.生成文件 curl -o index.html http://www.neocanable.com 以远程文件名保存 curl -O http://www.neocanable.com 参数-o为输出到某个文件,上面的命令等同于wget http://www.neocanable.com或者curl http://www.neocanable.com > index.html 3.添加proxy curl -x xxx.xxx.xxx.xxx http://www.neocanable.com 通过代理ip访问网页 4.添加浏览器信息 通常服务器的日志会记录客户端浏览器的信息 curl -A “浏览器信息” http://www.neocanable.com 5.批量下载文件 curl http://www.xxx.com/action/[1-100].html > /dev/null 这个最适合爬自己网站的缓存了 文件下载后重新命名和类正则使用,下载后的文件是demo1-001.html curl -o #1_#2 http://www.xxx.com/~{demo1,demo2}/[1-100].html 创建需要的目录 curl -o –create-dirs http://www.xxx.com/~{demo1,demo2}/[1-100].html 6.分块下载 curl -r 0-1024 http://www.xxx.com/aa.zip curl -r 1025- http://www.xxx.com/aa.zip 先下1M,然后再下剩下的 7.curl ftp 访问ftp地址 curl -u username:password ftp://www.xxx.com curl -u ftp://www.xxx.com 添加端口 curl -u username:password -P8899 ftp://www.xxx.com 上传文件到ftp curl -T /home/neo/demo.jpg -u username:password ftp://www.xxx.com 8.测试参数 测试站点相应时间 curl -o /dev/null -s -w %{time_connect}:%{time_starttransfer}:%{time_total} www.google.com 查看http_code curl -o /dev/null -s -w %{http_code} http://www.neocanable.com 网页或文件大小 curl -o /dev/null -s -w %{size_header} http://www.neocanable.com http_code:http返回类似404,200,500等 time_total:总相应时间 time_namelookup:域名解析时间 time_connect:连接到目标地址耗费的时间 time_pretransfer:从执行到开始传输文件的时间间隔 time_starttransfer:从执行到开始传输文件的时间间隔 size_download:下载网页或文件大小 size_upload:上传文件大小 size_header:响应头 size_request:发送请求参数大小 speed_download:传输速度 speed_upload:平均上传速度 content_type:下载文件类型. (Added in 7.9.5) 9.post和get请求 get请求 curl “param1=name&params2=pass” http://www.xxx.com post请求 curl -d “param1=name&params2=pass” http://www.xxx.com 10.响应超时 curl -m 40 http://www.xxx.com curl –timeout 40 http://www.xxx.com 11.破解网站的防盗链 curl -e “http://www.a.net” http://www.b.net/acion 12.网站头部信息 curl -I http://www.neocanable.com 13.更总url跳转 curl -L http://url.cn/2yQFfd 14.正确的给url编码 curl –data-urlencode http://www.xxx.com/action?name=张三&sex=男 15.限制url的传输速度 curl –limit-rate http://www.xxx.com/action 16.限制下载文件大小 curl –max-filesize 1024 http://www.xxx.com/action 超过1M将不执行操作,并且返回出错 17.curl错误代码 1:未支持的协议。此版cURL不支持这一协议。 2:初始化失败。 3:URL格式错误。语法不正确。 5:无法解析代理。无法解析给定代理主机。 6:无法解析主机。无法解析给定的远程主机。 7:无法连接到主机。 8:FTP非正常的服务器应答。cURL无法解析服务器发送的数据。 9:FTP访问被拒绝。服务器拒绝登入或无法获取您想要的特定资源或目录。最有可能的是您试图进入一个在此服务器上不存在的目录。 11:FTP 非正常的PASS回复。cURL无法解析发送到PASS请求的应答。 13:FTP 非正常的的PASV应答,cURL无法解析发送到PASV请求的应答。 14:FTP非正常的227格式。cURL无法解析服务器发送的227行。 15:FTP无法连接到主机。无法解析在227行中获取的主机IP。 17:FTP无法设定为二进制传输。无法改变传输方式到二进制。 18:部分文件。只有部分文件被传输。 19:FTP不能下载/访问给定的文件, RETR (或类似)命令失败。 21:FTP quote错误。quote命令从服务器返回错误。 22:HTTP 找不到网页。找不到所请求的URL或返回另一个HTTP 400或以上错误。此返回代码只出现在使用了-f/–fail选项以后。 23:写入错误。cURL无法向本地文件系统或类似目的写入数据。 25:FTP 无法STOR文件。服务器拒绝了用于FTP上传的STOR操作。 26:读错误。各类读取问题。 27:内存不足。内存分配请求失败。 28:操作超时。到达指定的超时期限条件。 30:FTP PORT失败。PORT命令失败。并非所有的FTP服务器支持PORT命令,请尝试使用被动(PASV)传输代替! 31:FTP无法使用REST命令。REST命令失败。此命令用来恢复的FTP传输。 33:HTTP range错误。range “命令”不起作用。 34:HTTP POST错误。内部POST请求产生错误。 35:SSL连接错误。SSL握手失败。 36:FTP 续传损坏。不能继续早些时候被中止的下载。 37:文件无法读取。无法打开文件。权限问题? 38:LDAP 无法绑定。LDAP绑定(bind)操作失败。 39:LDAP 搜索失败。 41:功能无法找到。无法找到必要的LDAP功能。 42:由回调终止。应用程序告知cURL终止运作。 43:内部错误。由一个不正确参数调用了功能。 45:接口错误。指定的外发接口无法使用。 47:过多的重定向。cURL达到了跟随重定向设定的最大限额跟 48:指定了未知TELNET选项。 49:不合式的telnet选项。 51:peer的SSL证书或SSH的MD5指纹没有确定。 52:服务器无任何应答,该情况在此处被认为是一个错误。 53:找不到SSL加密引擎。 54:无法将SSL加密引擎设置为默认。 55:发送网络数据失败。 56:在接收网络数据时失败。 58:本地证书有问题。 59:无法使用指定的SSL密码。 60:peer证书无法被已知的CA证书验证。 61:无法辨识的传输编码。 62:无效的LDAP URL。 63:超过最大文件尺寸。 64:要求的FTP的SSL水平失败。 65:发送此数据需要的回卷(rewind)失败。 66:初始化SSL引擎失败。 67:用户名、密码或类似的信息未被接受,cURL登录失败。 68:在TFTP服务器上找不到文件。 69:TFTP服务器权限有问题。 70:TFTP服务器磁盘空间不足。 71:非法的TFTP操作。 72:未知TFTP传输编号(ID)。 73:文件已存在(TFTP) 。 74:无此用户(TFTP) 。 75:字符转换失败。 76:需要字符转换功能。 77:读SSL证书出现问题(路径?访问权限? ) 。 78:URL中引用的资源不存在。 79:SSH会话期间发生一个未知错误。 80:未能关闭SSL连接。 82:无法加载CRL文件,丢失或格式不正确(在7.19.0版中增加 ) 。 83:签发检查失败(在7.19.0版中增加 ) 。
### cURL 命令使用指南 #### 定义与概述 cURL(CommandLine Uniform Resource Locator),是在命令行终端下使用的网络请求工具,支持多种协议如HTTP、HTTPS、FTP等。此工具不仅适用于命令行环境,还有专门用于程序开发的libcurl版本[^1]。 #### Windows 下的安装与基本配置 对于希望在Windows环境中使用cURL的用户来说,可以从指定项目地址下载适合的操作系统版本,并按照官方文档完成安装过程。一旦安装成功,即可通过命令提示符或者PowerShell调用`curl`指令执行各类网络操作[^2]。 #### 自定义请求头部信息 当需要向目标服务器发送特定格式的数据时,比如JSON数据,可以通过添加 `-H` 参数来自定义HTTP头字段的内容类型为 `application/json` 。这有助于确保API接口能够正确解析传入的信息[^3]。 #### 实际应用场景举例 假设要验证某个Web服务端点的状态码返回情况,则可以直接输入如下命令: ```bash curl -I http://example.com/ ``` 如果目的是获取网页HTML源代码而不关心其他响应细节的话,只需简单地提供完整的URL作为参数传递给`curl`函数即可实现目的: ```bash curl http://example.com/ ``` 而对于POST类型的提交动作,可借助于`--data`选项附加表单数据到请求体内部去: ```bash curl --data "param1=value1&param2=value2" http://example.com/resource_post ``` 最后值得注意的是,在实际工作中经常会遇到SSL证书校验失败的情况,此时可以在命令后面追加`-k`标志位忽略此类警告继续通信;当然生产环境下不建议这样做除非确实有必要绕过安全机制[^4]。 #### 功能特性总结 作为一个跨平台的应用层协议客户端软件包,cURL几乎涵盖了所有常见的互联网传输方式并且提供了丰富的命令行选项让用户可以根据具体需求灵活调整行为模式。无论是初学者还是经验丰富的开发者都能从中受益匪浅[^5]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值