CURL命令介绍

文章作者:Tyan
博客:noahsnail.com  |  CSDN  | 

1. CURL介绍

CURL,全称Command Line URL Viewer,是一个Linux命令行工具,能从服务器下载数据,也能往服务器上发送数据,支持多种协议,支持的协议有:DICT,FILE,FTP,FTPS,GOPHER,HTTP,HTTPS,IMAP,IMAPS,LDAP,LDAPS,POP3,POP3S,RTMP,RTSP,SCP,SFTP,SMB,SMBS,SMTP,SMTPS,TELNET和TFTP。从CURL支持的协议就可以看出,CURL命令非常强大。

2. CURL命令用法

2.1 curl url

# 命令形式:$ curl url,访问网页,url为网页的网址,开发中可以用来查看API的返回值

# 访问百度主页,返回的是百度主页的网页源码
$ curl www.baidu.com

 百度一下,你就知道  

关于百度 About Baidu

©2016 Baidu 使用百度前必读  意见反馈 京ICP证030173号 

2.2 curl -o/-O filename url

# 命令形式:$ curl -o/-O filename url,保存访问的网页或文件,-o参数是保存,filename是要保存的文件名,-O是将远端的文件以远端文件的文件名自动保存到本地,这个命令主要是下载文件,如果需要获取多个文件,可以采用curl -O url1 -O url2

# 访问百度主页,并将访问内容保存到baidu.html中
$ curl -o baidu.html www.baidu.com
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100  2381  100  2381    0     0  34934      0 --:--:-- --:--:-- --:--:-- 35537

# 从远端服务器下载一张图片,保存为1.jpg
$ curl -o 1.jpg http://ocs628urt.bkt.clouddn.com/table_1.1.png
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100  126k  100  126k    0     0   161k      0 --:--:-- --:--:-- --:--:--  161k

# 从远程服务器下载一张图片,保存的文件名为图片在远程服务器上的名字
$ curl -O http://ocs628urt.bkt.clouddn.com/table_1.1.png
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100  126k  100  126k    0     0   132k      0 --:--:-- --:--:-- --:--:--  132k

# 下载多个文件
$ curl -O http://ocs628urt.bkt.clouddn.com/table_1.1.png -O http://ocs628urt.bkt.clouddn.com/table_java_2.png
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100  126k  100  126k    0     0   402k      0 --:--:-- --:--:-- --:--:--  402k
100  153k  100  153k    0     0  33822      0  0:00:04  0:00:04 --:--:-- 42510

2.3 curl -i/-I url

# 命令形式:$ curl -i url,访问网页并显示response信息,-i参数是显示response信息,-I参数是只显示response信息

# 访问百度主页,并将访问内容保存到baidu.html中
$ curl -i www.baidu.com
HTTP/1.1 200 OK
Server: bfe/1.0.8.18
Date: Wed, 02 Nov 2016 09:36:25 GMT
Content-Type: text/html
Content-Length: 2381
Last-Modified: Mon, 25 Jul 2016 11:11:28 GMT
Connection: Keep-Alive
ETag: "5795f3e0-94d"
Cache-Control: private, no-cache, no-store, proxy-revalidate, no-transform
Pragma: no-cache
Set-Cookie: BDORZ=27315; max-age=86400; domain=.baidu.com; path=/
Accept-Ranges: bytes


 百度一下,你就知道  

关于百度 About Baidu

©2016 Baidu 使用百度前必读  意见反馈 京ICP证030173号 

# 只显示response信息 $ curl -I www.baidu.com HTTP/1.1 200 OK Server: bfe/1.0.8.18 Date: Wed, 02 Nov 2016 09:38:06 GMT Content-Type: text/html Content-Length: 277 Last-Modified: Mon, 13 Jun 2016 02:50:00 GMT Connection: Keep-Alive ETag: "575e1f58-115" Cache-Control: private, no-cache, no-store, proxy-revalidate, no-transform Pragma: no-cache Accept-Ranges: bytes

备注:

  • HTTP/1.1 200 OK,响应状态行

  • HTTP/1.1,访问采用的协议为HTTP,版本为1.1

  • 200 OK,HTTP状态码,表示文档正确返回

  • Server,服务器应用程序软件的名称和版本

  • Date,服务器产生响应的日期

  • Content-Type,响应实体的主题是一个html文本

  • Content-Length,响应实体的主题包含了277字节的数据

  • Last-Modified,资源的最后修改日期时间

  • Connection,连接方式,close或keep-alive

  • ETag,资源的匹配信息

  • Cache-Control,控制缓存的行为

  • Pragma,报文指令

  • Accept-Ranges,是否接受字节范围请求

2.4 curl -v url/curl --trace filename url

# 命令形式:$ crul -v url,-v参数是显示http访问的整个过程,即整个通信过程,curl --trace filename url相比-v信息更详细,并且会将访问过程输出到一个文件中

$ curl -v www.baidu.com
* Rebuilt URL to: www.baidu.com/
*   Trying 61.135.169.121...
* Connected to www.baidu.com (61.135.169.121) port 80 (#0)
> GET / HTTP/1.1
> Host: www.baidu.com
> User-Agent: curl/7.43.0
> Accept: */*
> 
< HTTP/1.1 200 OK
< Server: bfe/1.0.8.18
< Date: Wed, 02 Nov 2016 10:08:13 GMT
< Content-Type: text/html
< Content-Length: 2381
< Last-Modified: Mon, 25 Jul 2016 11:11:30 GMT
< Connection: Keep-Alive
< ETag: "5795f3e2-94d"
< Cache-Control: private, no-cache, no-store, proxy-revalidate, no-transform
< Pragma: no-cache
< Set-Cookie: BDORZ=27315; max-age=86400; domain=.baidu.com; path=/
< Accept-Ranges: bytes
< 

 百度一下,你就知道  

关于百度 About Baidu

©2016 Baidu 使用百度前必读  意见反馈 京ICP证030173号 

* Connection #0 to host www.baidu.com left intact # 访问百度,访问的详细信息输出到output.txt文件中 $ curl --trace output.txt www.baidu.com 百度一下,你就知道

关于百度 About Baidu

©2016 Baidu 使用百度前必读  意见反馈 京ICP证030173号 

2.5 curl --header "Content-Type:application/json" www.baidu.com

# 命令形式:curl --header "header content" url,--header主要是设置request请求的头部,Content-Type:application/json就是JS中ajax请求中的Content-Type:application/json

$ curl --header "Content-Type:application/json" www.baidu.com

 百度一下,你就知道  

关于百度 About Baidu

©2016 Baidu 使用百度前必读  意见反馈 京ICP证030173号 

2.6 curl -L url

# 命令形式:curl -L url,-L是对页面进行重定向,主要用在请求的页面移动到别的站点的情况下。默认情况下CURL不会发送HTTP Location headers(重定向)

# 访问新浪,内容就不展示了,太多了,可以自己试一下
$ curl -L www.sina.com

2.7 curl -C - -O url

# 命令形式:curl -C - -O url,-C -下载大文件时支持断点续传功能,-C后面要有一个整数,-C -/--continue-at命令等价

$ curl -C - -O http://www.gnu.org/software/gettext/manual/gettext.html
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100 1375k  100 1375k    0     0  13479      0  0:01:44  0:01:44 --:--:--  6633

2.8 curl url >> filename

# 命令形式:curl url >> filename,利用linux重定向功能将访问的内容输出到文件中

# 访问百度并将网页输出到baidu.html中,与curl -o baidu.html www.baidu.com等价
$ curl www.baidu.com >> baidu.html
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100  2381  100  2381    0     0   1512      0  0:00:01  0:00:01 --:--:--  1512

2.9 curl --limit-rate 1K url

命令形式:curl --limit-rate 1K url,限制访问网络速度到1K,可用G,M,K,B

# 以1K的网速访问百度
$ curl --limit-rate 1K www.baidu.com

 百度一下,你就知道  

关于百度 About Baidu

©2016 Baidu 使用百度前必读  意见反馈 京ICP证030173号 

2.10 curl -u username url/curl --user username:password url

# 命令形式:curl -u username url,用用户名访问页面,当页面访问需要授权时使用,或者直接使用curl --user username:password url访问,最好用第一种形式,防止密码泄露

# 用用户名访问百度
$ curl -u 24782*****@qq.com www.baidu.com
Enter host password for user '24782*****@qq.com':

 百度一下,你就知道  

关于百度 About Baidu

©2016 Baidu 使用百度前必读  意见反馈 京ICP证030173号 

# 用户名和密码访问百度 $ curl --user 24782*****@qq.com:****** www.baidu.com 百度一下,你就知道

关于百度 About Baidu

©2016 Baidu 使用百度前必读  意见反馈 京ICP证030173号 

2.11 curl -z date url

# 命令形式:curl -z date url,date指定时间,在date之后文件更新过之后才会下载,可以与response的last-modified联系到一起,工作中会用到,当要更新数据时,先查看last-modified

# 正常访问http://www.example.com/yy.html
$ curl http://www.example.com/yy.html



    Example Domain

    
    
    
        



Example Domain

This domain is established to be used for illustrative examples in documents. You may use this domain in examples without prior coordination or asking for permission.

More information...

# 查看网页的last-modified $ curl -I http://www.example.com/yy.html HTTP/1.1 404 Not Found Accept-Ranges: bytes Cache-Control: max-age=604800 Content-Type: text/html Date: Wed, 02 Nov 2016 14:41:48 GMT Etag: "359670651+gzip" Expires: Wed, 09 Nov 2016 14:41:48 GMT Last-Modified: Fri, 09 Aug 2013 23:54:35 GMT Server: ECS (cpm/F9B3) X-Cache: HIT x-ec-custom-error: 1 Content-Length: 1270 # 指定时间为2016年6月18日,在那之后页面有更新才会访问 $ curl -z 18-Jun-16 http://www.example.com/yy.html $

2.12 curl -x proxyip:port url

# 命令形式:curl -x proxyip:port url,代理服务器如果是买的,需要输入用户名和密码

# 用代理访问百度,需要用户名和密码
$ curl -u -x 138.128.***.***:8*** www.baidu.com
Enter host password for user '-x':
curl: (52) Empty reply from server

 百度一下,你就知道  

关于百度 About Baidu

©2016 Baidu 使用百度前必读  意见反馈 京ICP证030173号 

2.13 curl -D/-b/-c filename url

# 命令形式:url -D filename url,-D是将header信息(包括cookie)保存到文件中, -b是使用上次保存的Cookie信息,从文件中读取Cookie,也可指定Cookie文本,-c是接收Cookie并保存

# 访问百度并将header信息保存到test中
$ curl -D test www.baidu.com

 百度一下,你就知道  

关于百度 About Baidu

©2016 Baidu 使用百度前必读  意见反馈 京ICP证030173号 

# test文件内容 HTTP/1.1 200 OK Server: bfe/1.0.8.18 Date: Wed, 02 Nov 2016 15:08:31 GMT Content-Type: text/html Content-Length: 2381 Last-Modified: Mon, 25 Jul 2016 11:11:41 GMT Connection: Keep-Alive ETag: "5795f3ed-94d" Cache-Control: private, no-cache, no-store, proxy-revalidate, no-transform Pragma: no-cache Set-Cookie: BDORZ=27315; max-age=86400; domain=.baidu.com; path=/ Accept-Ranges: bytes # 访问百度将Cookie信息保存到test中 $ curl -c test www.baidu.com 百度一下,你就知道

关于百度 About Baidu

©2016 Baidu 使用百度前必读  意见反馈 京ICP证030173号 

# 使用保存的Cookie信息test访问百度 $ curl -b test www.baidu.com 百度一下,你就知道

关于百度 About Baidu

©2016 Baidu 使用百度前必读  意见反馈 京ICP证030173号 

# 使用Cookie文本访问百度 $ curl -b "name=test;pwd=test;" www.baidu.com 百度一下,你就知道

关于百度 About Baidu

©2016 Baidu 使用百度前必读  意见反馈 京ICP证030173号 

2.14 curl -G -d "text" url

# 命令形式:curl -G -d "text" url,-G是以GET方式访问,-d "test"是指定GET的请求数据

# 以Get方式提交数据并访问百度,可以用来测试API
$ curl -G -d "name=test" www.baidu.com

 百度一下,你就知道  

关于百度 About Baidu

©2016 Baidu 使用百度前必读  意见反馈 京ICP证030173号 

2.15 curl -# url

# 命令形式:curl -# url,-#表示访问时以进度条形式显示,常用在下载中

# 下载图片并显示进度条
$ curl -# -O http://ocs628urt.bkt.clouddn.com/table_1.1.png
######################################################################## 100.0%

2.16 curl -A/--user-agent "text" url

# 命令形式:curl -A/--user-agent "text" url,-A/--user-agent "text"指定了访问者的设备信息,包括系统、CPU、浏览器版本等等。可以隐藏真正的设备信息

# 指定访问设备信息来访问百度
$ curl -A "Mozilla/4.0 (compatible; MSIE 10.0; Windows NT 5.0)"  www.baidu.com

302 Found

302 Found


pr-nginx_1-0-304_BRANCH Branch Time : Tue Oct 18 14:33:14 CST 2016

2.17 curl -e/--referer url1 url2

# 命令形式:curl -e/--referer url1 url2,-e/--referer表明是从url1跳转访问url2的

# 从example.com跳转访问百度
$ curl --referer example.com www.baidu.com

 百度一下,你就知道  

关于百度 About Baidu

©2016 Baidu 使用百度前必读  意见反馈 京ICP证030173号 

2.18 curl -X POST url

# 命令形式:curl -X POST url,-X POST,指定其它形式访问url,curl默认使用的HTTP的GET方法,-X可以指定其它方法,例如POST,DELETE,PUT等,使用POST时可以使用-d "text"来指定POST的数据

# 以POST方式访问example.com
$ curl -X POST example.com



    
        411 - Length Required
    
    
        

411 - Length Required

# 以POST+Data的方式访问example.com $ curl -X POST -d "name=test" example.com Example Domain

Example Domain

This domain is established to be used for illustrative examples in documents. You may use this domain in examples without prior coordination or asking for permission.

More information...

3. 总结

CURL的命令参数还有很多,就不一一演示了。下面是CURL的参数及功能列表:

-a/--append 上传文件时,附加到目标文件  
 -A/--user-agent   设置用户代理发送给服务器  
 - anyauth   可以使用“任何”身份验证方法  
 -b/--cookie  cookie字符串或文件读取位置  
 - basic 使用HTTP基本验证  
 -B/--use-ascii 使用ASCII /文本传输  
 -c/--cookie-jar  操作结束后把cookie写入到这个文件中  
 -C/--continue-at   断点续转  
 -d/--data    HTTP POST方式传送数据  
 --data-ascii   以ascii的方式post数据  
 --data-binary  以二进制的方式post数据  
 --negotiate     使用HTTP身份验证  
 --digest        使用数字身份验证  
 --disable-eprt  禁止使用EPRT或LPRT  
 --disable-epsv  禁止使用EPSV  
 -D/--dump-header  把header信息写入到该文件中  
 --egd-file  为随机数据(SSL)设置EGD socket路径  
 --tcp-nodelay   使用TCP_NODELAY选项  
 -e/--referer 来源网址  
 -E/--cert  客户端证书文件和密码 (SSL)  
 --cert-type  证书文件类型 (DER/PEM/ENG) (SSL)  
 --key      私钥文件名 (SSL)  
 --key-type  私钥文件类型 (DER/PEM/ENG) (SSL)  
 --pass    私钥密码 (SSL)  
 --engine   加密引擎使用 (SSL). "--engine list" for list  
 --cacert  CA证书 (SSL)  
 --capath  CA目录 (made using c_rehash) to verify peer against (SSL)  
 --ciphers   SSL密码  
 --compressed    要求返回是压缩的形势 (using deflate or gzip)  
 --connect-timeout  设置最大请求时间  
 --create-dirs   建立本地目录的目录层次结构  
 --crlf          上传是把LF转变成CRLF  
 -f/--fail          连接失败时不显示http错误  
 --ftp-create-dirs 如果远程目录不存在,创建远程目录  
 --ftp-method [multicwd/nocwd/singlecwd] 控制CWD的使用  
 --ftp-pasv      使用 PASV/EPSV 代替端口  
 --ftp-skip-pasv-ip 使用PASV的时候,忽略该IP地址  
 --ftp-ssl       尝试用 SSL/TLS 来进行ftp数据传输  
 --ftp-ssl-reqd  要求用 SSL/TLS 来进行ftp数据传输  
 -F/--form  模拟http表单提交数据  
 -form-string  模拟http表单提交数据  
 -g/--globoff 禁用网址序列和范围使用{}和[]  
 -G/--get 以get的方式来发送数据  
 -h/--help 帮助  
 -H/--header 自定义头信息传递给服务器  
 --ignore-content-length  忽略的HTTP头信息的长度  
 -i/--include 输出时包括protocol头信息  
 -I/--head  只显示文档信息  
 从文件中读取-j/--junk-session-cookies忽略会话Cookie  
 - 界面指定网络接口/地址使用  
 - krb4 <级别>启用与指定的安全级别krb4  
 -j/--junk-session-cookies 读取文件进忽略session cookie  
 --interface  使用指定网络接口/地址  
 --krb4   使用指定安全级别的krb4  
 -k/--insecure 允许不使用证书到SSL站点  
 -K/--config  指定的配置文件读取  
 -l/--list-only 列出ftp目录下的文件名称  
 --limit-rate  设置传输速度  
 --local-port 强制使用本地端口号  
 -m/--max-time  设置最大传输时间  
 --max-redirs  设置最大读取的目录数  
 --max-filesize  设置最大下载的文件总量  
 -M/--manual  显示全手动  
 -n/--netrc 从netrc文件中读取用户名和密码  
 --netrc-optional 使用 .netrc 或者 URL来覆盖-n  
 --ntlm          使用 HTTP NTLM 身份验证  
 -N/--no-buffer 禁用缓冲输出  
 -o/--output 把输出写到该文件中  
 -O/--remote-name 把输出写到该文件中,保留远程文件的文件名  
 -p/--proxytunnel   使用HTTP代理  
 --proxy-anyauth 选择任一代理身份验证方法  
 --proxy-basic   在代理上使用基本身份验证  
 --proxy-digest  在代理上使用数字身份验证  
 --proxy-ntlm    在代理上使用ntlm身份验证  
 -P/--ftp-port 
使用端口地址,而不是使用PASV -Q/--quote 文件传输前,发送命令到服务器 -r/--range 检索来自HTTP/1.1或FTP服务器字节范围 --range-file 读取(SSL)的随机文件 -R/--remote-time 在本地生成文件时,保留远程文件时间 --retry 传输出现问题时,重试的次数 --retry-delay 传输出现问题时,设置重试间隔时间 --retry-max-time 传输出现问题时,设置最大重试时间 -s/--silent静音模式。不输出任何东西 -S/--show-error 显示错误 --socks4 用socks4代理给定主机和端口 --socks5 用socks5代理给定主机和端口 --stderr -t/--telnet-option Telnet选项设置 --trace 对指定文件进行debug --trace-ascii Like --跟踪但没有hex输出 --trace-time 跟踪/详细输出时,添加时间戳 -T/--upload-file 上传文件 --url Spet URL to work with -u/--user 设置服务器的用户和密码 -U/--proxy-user 设置代理用户名和密码 -v/--verbose -V/--version 显示版本信息 -w/--write-out [format]什么输出完成后 -x/--proxy 在给定的端口上使用HTTP代理 -X/--request 指定什么命令 -y/--speed-time 放弃限速所要的时间。默认为30 -Y/--speed-limit 停止传输速度的限制,速度时间'秒 -z/--time-cond 传送时间设置 -0/--http1.0 使用HTTP 1.0 -1/--tlsv1 使用TLSv1(SSL) -2/--sslv2 使用SSLv2的(SSL) -3/--sslv3 使用的SSLv3(SSL) --3p-quote like -Q for the source URL for 3rd party transfer --3p-url 使用url,进行第三方传送 --3p-user 使用用户名和密码,进行第三方传送 -4/--ipv4 使用IP4 -6/--ipv6 使用IP6 -#/--progress-bar 用进度条显示当前的传送状态

参考文献:

  1. https://curl.haxx.se/

  2. http://www.ruanyifeng.com/blog/2011/09/curl.html

  3. http://www.cnblogs.com/gbyukg/p/3326825.html

  4. http://blog.csdn.net/wangjunji34478/article/details/35988223

  5. http://blog.51yip.com/linux/1049.html

你可能感兴趣的:(CURL命令介绍)