设为首页 收藏本站
查看: 1145|回复: 0

Linux Shell学习--curl命令详解

[复制链接]

尚未签到

发表于 2018-8-22 07:48:07 | 显示全部楼层 |阅读模式
  curl命令详解
  (1)curl介绍
  作为一款强力工具,curl支持包括HTTP、HTTPS、FTP在内的众多协议。它还支持POST、cookie、认证、从指定偏移处下载部分文件、参照页(referer)、用户代理字符串、扩展头部、限速、文件大小限制、进度条等特性。如果要和网页访问序列(web page usagesequence)以及数据检索自动化打交道,那么curl定能助你一臂之力。
  (2)curlhelp
curl --helpUsage: curl [options...] Options: (H) means HTTP/HTTPS only, (F) means FTP only    --anyauth       Pick "any" authentication method (H) -a/--append        Append to target file when uploading (F/SFTP)    --basic         Use HTTP Basic Authentication (H)    --cacert  CA certificate to verify peer against (SSL)    --capath  CA directory to verify peer against (SSL) -E/--cert  Client certificate file and password (SSL)    --cert-type  Certificate file type (DER/PEM/ENG) (SSL)    --ciphers  SSL ciphers to use (SSL)    --compressed    Request compressed response (using deflate or gzip) -K/--config  Specify which config file to read    --connect-timeout  Maximum time allowed for connection -C/--continue-at  Resumed transfer offset -b/--cookie  Cookie string or file to read cookies from (H) -c/--cookie-jar  Write cookies to this file after operation (H)    --create-dirs   Create necessary local directory hierarchy    --crlf          Convert LF to CRLF in upload    --crlfile  Get a CRL list in PEM format from the given file -d/--data    HTTP POST data (H)    --data-ascii   HTTP POST ASCII data (H)    --data-binary  HTTP POST binary data (H)    --data-urlencode  HTTP POST data url encoded (H)    --delegation STRING GSS-API delegation permission    --digest        Use HTTP Digest Authentication (H)    --disable-eprt  Inhibit using EPRT or LPRT (F)    --disable-epsv  Inhibit using EPSV (F) -D/--dump-header  Write the headers to this file    --egd-file  EGD socket path for random data (SSL)    --engine   Crypto engine to use (SSL). "--engine list" for list -f/--fail          Fail silently (no output at all) on HTTP errors (H) -F/--form  Specify HTTP multipart POST data (H)    --form-string  Specify HTTP multipart POST data (H)    --ftp-account  Account data to send when requested by server (F)    --ftp-alternative-to-user  String to replace "USER [name]" (F)    --ftp-create-dirs Create the remote dirs if not present (F)    --ftp-method [multicwd/nocwd/singlecwd] Control CWD usage (F)    --ftp-pasv      Use PASV/EPSV instead of PORT (F) -P/--ftp-port  Use PORT with address instead of PASV (F)    --ftp-skip-pasv-ip Skip the IP address for PASV (F)    --ftp-ssl       Try SSL/TLS for ftp transfer (F)    --ftp-ssl-ccc   Send CCC after authenticating (F)    --ftp-ssl-ccc-mode [active/passive] Set CCC mode (F)    --ftp-ssl-control Require SSL/TLS for ftp login, clear for transfer (F)    --ftp-ssl-reqd  Require SSL/TLS for ftp transfer (F) -G/--get           Send the -d data with a HTTP GET (H) -g/--globoff       Disable URL sequences and ranges using {} and [] -H/--header  Custom header to pass to server (H) -I/--head          Show document info only -h/--help          This help text    --hostpubmd5  Hex encoded MD5 string of the host public key. (SSH) -0/--http1.0       Use HTTP 1.0 (H)    --ignore-content-length  Ignore the HTTP Content-Length header -i/--include       Include protocol headers in the output (H/F) -k/--insecure      Allow connections to SSL sites without certs (H)    --interface  Specify network interface/address to use -4/--ipv4          Resolve name to IPv4 address -6/--ipv6          Resolve name to IPv6 address -j/--junk-session-cookies Ignore session cookies read from file (H)    --keepalive-time  Interval between keepalive probes    --key      Private key file name (SSL/SSH)    --key-type  Private key file type (DER/PEM/ENG) (SSL)    --krb    Enable Kerberos with specified security level (F)    --libcurl  Dump libcurl equivalent code of this command line    --limit-rate  Limit transfer speed to this rate -l/--list-only     List only names of an FTP directory (F)    --local-port [-num] Force use of these local port numbers -L/--location      Follow Location: hints (H)    --location-trusted Follow Location: and send auth to other hosts (H) -M/--manual        Display the full manual    --max-filesize  Maximum file size to download (H/F)    --max-redirs  Maximum number of redirects allowed (H) -m/--max-time  Maximum time allowed for the transfer    --negotiate     Use HTTP Negotiate Authentication (H) -n/--netrc         Must read .netrc for user name and password    --netrc-optional Use either .netrc or URL; overrides -n -N/--no-buffer     Disable buffering of the output stream    --no-keepalive  Disable keepalive use on the connection    --no-sessionid  Disable SSL session-ID reusing (SSL)    --noproxy       Comma-separated list of hosts which do not use proxy    --ntlm          Use HTTP NTLM authentication (H) -o/--output  Write output to  instead of stdout    --pass    Pass phrase for the private key (SSL/SSH)    --post301       Do not switch to GET after following a 301 redirect (H)    --post302       Do not switch to GET after following a 302 redirect (H) -#/--progress-bar  Display transfer progress as a progress bar -x/--proxy  Use HTTP proxy on given port    --proxy-anyauth Pick "any" proxy authentication method (H)    --proxy-basic   Use Basic authentication on the proxy (H)    --proxy-digest  Use Digest authentication on the proxy (H)    --proxy-negotiate Use Negotiate authentication on the proxy (H)    --proxy-ntlm    Use NTLM authentication on the proxy (H) -U/--proxy-user  Set proxy user and password    --proxy1.0  Use HTTP/1.0 proxy on given port -p/--proxytunnel   Operate through a HTTP proxy tunnel (using CONNECT)    --pubkey   Public key file name (SSH) -Q/--quote    Send command(s) to server before file transfer (F/SFTP)    --random-file  File for reading random data from (SSL) -r/--range  Retrieve only the bytes within a range    --raw           Pass HTTP "raw", without any transfer decoding (H) -e/--referer       Referer URL (H) -O/--remote-name   Write output to a file named as the remote file    --remote-name-all Use the remote file name for all URLs -R/--remote-time   Set the remote file's time on the local output -X/--request  Specify request command to use    --retry    Retry request  times if transient problems occur    --retry-delay  When retrying, wait this many seconds between each    --retry-max-time  Retry only within this period -S/--show-error    Show error. With -s, make curl show errors when they occur -s/--silent        Silent mode. Don't output anything    --socks4  SOCKS4 proxy on given host + port    --socks4a  SOCKS4a proxy on given host + port    --socks5  SOCKS5 proxy on given host + port    --socks5-hostname  SOCKS5 proxy, pass host name to proxy    --socks5-gssapi-service  SOCKS5 proxy service name for gssapi    --socks5-gssapi-nec  Compatibility with NEC SOCKS5 server -Y/--speed-limit   Stop transfer if below speed-limit for 'speed-time' secs -y/--speed-time    Time needed to trig speed-limit abort. Defaults to 30 -2/--sslv2         Use SSLv2 (SSL) -3/--sslv3         Use SSLv3 (SSL)    --stderr  Where to redirect stderr. - means stdout    --tcp-nodelay   Use the TCP_NODELAY option -t/--telnet-option  Set telnet option -z/--time-cond  Transfer based on a time condition -1/--tlsv1         Use => TLSv1 (SSL)    --tlsv1.0       Use TLSv1.0 (SSL)    --tlsv1.1       Use TLSv1.1 (SSL)    --tlsv1.2       Use TLSv1.2 (SSL)    --trace   Write a debug trace to the given file    --trace-ascii  Like --trace but without the hex output    --trace-time    Add time stamps to trace/verbose output -T/--upload-file  Transfer  to remote site    --url      Set URL to work with -B/--use-ascii     Use ASCII/text transfer -u/--user  Set server user and password -A/--user-agent  User-Agent to send to server (H) -v/--verbose       Make the operation more talkative -V/--version       Show version number and quit -w/--write-out  What to output after completion -q                 If used as the first parameter disables .curlrc  
  (3)curl实战
  示例1:不带参数的curl
$ curl URL  不带任何参数,curl会将下载文件输出到stdout,将进度信息输出到stderr
  
  示例2:避免curl命令显示进度信息
  可以使用--silent选项。
$ curl --silent URL[root@MuBanJi_01 curl]# curl http://10.72.10.5:10010 >a.html  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current                                 Dload  Upload   Total   Spent    Left  Speed100  5346  100  5346    0     0  2931k      0 --:--:-- --:--:-- --:--:-- 5220k[root@MuBanJi_01 curl]#[root@MuBanJi_01 curl]#[root@MuBanJi_01 curl]#[root@MuBanJi_01 curl]# curl http://10.72.10.5:10010 --silent>a.html[root@MuBanJi_01 curl]# ll总用量 8-rw-r--r--. 1 root root 5346 9月  10 19:36 a.html[root@MuBanJi_01 curl]#  
  示例3:-O和-o选项
  -o/--output Write output to  instead of stdout
  -O/--remote-name   Write output to a file named as the remotefile
  选项–o表明将下载数据写入文件,而非标准输出中。文件名由自己手工指定,是必要参数。
  选项-O表示将下载数据写入文件,不过不需要指定文件名,该文件采用的是从URL中解析出的文件名
  如果在URL中找不到文件名,则会产生错误。因此要确保URL指向的是远程文件。Curl http://10.72.10.5:10010/ -O --silent就会显示错误信息,这是因为无法从URL中解析出文件名。
$ curl URL --silent –o filename$ curl URL --silent -O[root@MuBanJi_01 curl]# ll总用量 0[root@MuBanJi_01 curl]# curl  --silent -O   http://10.72.10.5:10010/index.html[root@MuBanJi_01 curl]# ll总用量 8-rw-r--r--. 1 root root 5346 9月  10 19:45 index.html[root@MuBanJi_01 curl]# curl  --silent -o a.html   http://10.72.10.5:10010/index.html[root@MuBanJi_01 curl]# ll总用量 16-rw-r--r--. 1 root root 5346 9月  10 19:45 a.html-rw-r--r--. 1 root root 5346 9月  10 19:45 index.html[root@MuBanJi_01 curl]#  
  示例4:显示进度条
  如果需要在下载过程中显示形如 # 的进度条,用 --progress代替 --silent。
$ curl  --progress -O   http://10.72.10.5:10010/index.html######################################################################## 100.0%  
  示例5:断点续传
  curl能够从特定的文件偏移处继续下载。可以通过指定一个偏移量来下载部分文件。
$ curl URL/file -C offset  偏移量是以字节为单位的整数。如果只是想断点续传,那么curl不需要指定准确的字节偏移。要是你希望curl推断出正确的续传位置,请使用选项 -C -,就像这样:
$ curl -C - URL  curl会自动计算出应该从哪里开始续传。
  
  示例6:用curl设置参照页字符串
  参照页(referer)是位于HTTP头部中的一个字符串,用来标识用户是从哪个页面到达当前页面的。如果用户点击了网页A中的某个链接,那么用户就会转到网页B,网页B头部的参照页字符串会包含网页A的URL。
  一些动态网页会在返回HTML页面前检测参照页字符串。例如,如果用户是通过Google搜索来到了当前网页,网页上会附带显示一个Google的logo;如果用户是通过手动输入URL来到当前网页,则显示另一个不同的页面。
  网站的作者可以根据条件进行判断:如果参照页是www.google.com,那么就返回一个Google页面,否则返回其他页面。
  可以用curl命令的 --referer选项指定参照页字符串:
$ curl --referer Referer_URL target_URL  例如:
$ curl --referer http://google.com http://slynux.org  
  示例7:用curl设置cookie
  我们可以用curl来指定并存储HTTP操作过程中使用到的cookie。
  要指定cookie,使用 --cookie"COOKIES"选项。
  cookies需要以name=value的形式来给出。多个cookie之间使用分号分隔。例如:
$ curl http://example.com --cookie "user=slynux;pass=hack"  如果要将cookie另存为一个文件,使用 --cookie-jar选项。例如:
$ curl URL --cookie-jar cookie_file  
  示例8:用curl设置用户代理字符串
  如果不指定用户代理(user agent),一些需要检验用户代理的网页就无法显示。你肯定碰到过有些陈旧的网站只能在InternetExplorer(IE)下正常工作。如果使用其他浏览器,这些网站就会提示说它只能用IE访问。这是因为这些网站检查了用户代理。你可以用curl来设置用户代理。
  curl的 --user-agent或 -A选项用于设置用户代理:
$ curl URL --user-agent "Mozilla/5.0"  其他HTTP头部信息也可以通过curl来发送。用-H"头部信息"传递多个头部信息。例如:
$ curl -H "Host: www.slynux.org" -H "Accept-language: en" URL  
  示例9:限定curl可占用的带宽
  如果带宽有限,又有多个用户共享,为了平稳流畅地分享带宽,我们可以用--limit-rate限制curl的下载速度:
$ curl URL --limit-rate 20k  在命令中用k(千字节)和m(兆字节)指定下载速度限制。
  
  示例10:指定最大下载量
  可以用--max-filesize选项指定可下载的最大文件大小:
$ curl URL --max-filesize bytes  如果文件大小超出限制,命令返回一个非0的退出码。如果命令正常运行,返回0。
  
  示例11:用curl进行认证
  可以用curl的选项 -u完成HTTP或FTP认证。
  -uusername:password可用来指定用户名和密码。它也可以不指定密码,而在后续的执行过程中按照提示输入密码。例如:
$ curl -u user:pass http://test_auth.com  如果你喜欢经提示后输入密码,只需要使用 -u username即可。例如:
$ curl -u user http://test_auth.com  
  示例12:只打印响应头部信息(不包括数据部分)
  -I/--head          Show document info only
  只打印响应头部(response header)有助于进行各种检查或统计。例如,如果要检查某个页面是否能够打开,并不需要下载整个页面内容。只用读取HTTP响应头部就能够知道这个页面是否可用。
  检查HTTP头部的一个用法就是在下载之前先获知文件大小。我们可以在下载之前,通过检查HTTP头部中的 Content-Length 参数来得知文件的长度。同样还可以从头部检索出其他一些有用的参数。Last-Modified参数能告诉我们远程文件最后的改动时间。
  通过 -I或--head 就可以只打印HTTP头部信息,而无须下载远程文件。例如:
[root@MuBanJi_01 curl]# curl -I http://10.72.10.5:10010/index.htmlHTTP/1.1 200 OKServer: nginxDate: Sun, 10 Sep 2017 12:25:22 GMTContent-Type: text/htmlContent-Length: 5346Connection: keep-aliveVary: Accept-EncodingLast-Modified: Fri, 18 Aug 2017 09:41:43 GMTVary: Accept-EncodingETag: "5996b657-14e2"Accept-Ranges: bytes  
  示例13-w选项,输出指定格式的内容到标准输出
  -w/--write-out What to output after completion
  顾名思义,write-out的作用就是输出点什么。curl的-w参数用于在一次完整且成功的操作后输出指定格式的内容到标准输出。
  输出格式由普通字符串和任意数量的变量组成,输出变量需要按照%{variable_name}的格式,如果需要输出%,double一下即可,即%%,同时,\n是换行,\r是回车,\t是TAB。curl会用合适的值来替代输出格式中的变量,所有可用变量如下:

  •   url_effective
  最终获取的url地址,尤其是当你指定给curl的地址存在301跳转,且通过-L继续追踪的情形。

  •   http_code
  http状态码,如200成功,301转向,404未找到,500服务器错误等。(The numerical response code that was found in the lastretrieved HTTP(S) or FTP(s) transfer. In 7.18.2 the alias response_code wasadded to show the same info.)
$ curl -I -s -o /dev/null -w %{http_code}"\n"   http://10.72.10.5:10010/index.html200

  •   http_connect
  The numericalcode that was found in the last response (from a proxy) to a curl CONNECTrequest. (Added in 7.12.4)

  •   time_total
  总时间,按秒计。精确到小数点后三位。(The total time,in seconds, that the full operation lasted. The time will be displayed withmillisecond resolution.)

  •   time_namelookup
  DNS解析时间,从请求开始到DNS解析完毕所用时间。(The time, in seconds, it took from the start until thename resolving was completed.)

  •   time_connect
  连接时间,从开始到建立TCP连接完成所用时间,包括前边DNS解析时间,如果需要单纯的得到连接时间,用这个time_connect时间减去前边time_namelookup时间。以下同理,不再赘述。(The time, inseconds, it took from the start until the TCP connect to the remote host (orproxy) was completed.)

  •   time_appconnect
  连接建立完成时间,如SSL/SSH等建立连接或者完成三次握手时间。(The time, inseconds, it took from the start until the SSL/SSH/etc connect/handshake to theremote host was completed. (Added in 7.19.0))

  •   time_pretransfer
  开始到准备传输的时间。(The time, in seconds, it took from the start until thefile transfer was just about to begin. This includes all pre-transfer commandsand negotiations that are specific to the particular protocol(s) involved.)

  •   time_redirect
  重定向时间,包括到最后一次传输前的几次重定向的DNS解析,连接,预传输,传输时间。(The time, inseconds, it took for all redirection steps include name lookup, connect,pretransfer and transfer before the final transaction was started.time_redirect shows the complete execution time for multiple redirections.(Added in 7.12.3))

  •   time_starttransfer
  开始传输时间。在发出请求之后,Web 服务器返回数据的第一个字节所用的时间(The time, inseconds, it took from the start until the first byte was just about to betransferred. This includes time_pretransfer and also the time the server neededto calculate the result.)

  •   size_download
  下载大小。(The total amount of bytes that were downloaded.)

  •   size_upload
  上传大小。(The total amount of bytes that were uploaded.)

  •   size_header  
  下载的header的大小(The totalamount of bytes of the downloaded headers.)

  •   size_request
  请求的大小。(The total amount of bytes that were sent in the HTTPrequest.)

  •   speed_download
  下载速度,单位-字节每秒。(The averagedownload speed that curl measured for the complete download. Bytes per second.)

  •   speed_upload
  上传速度,单位-字节每秒。(The average upload speed that curl measured for thecomplete upload. Bytes per second.)

  •   content_type
  就是content-Type, (text/html;);(TheContent-Type of the requested document, if there was any.)

  •   num_connects
  Number of newconnects made in the recent transfer. (Added in 7.12.3)

  •   num_redirects
  Number ofredirects that were followed in the request. (Added in 7.12.3)

  •   redirect_url
  When a HTTPrequest was made without -L to follow redirects, this variable will show theactual URL a redirect would take you to. (Added in 7.18.2)

  •   ftp_entry_path
  The initial pathlibcurl ended up in when logging on to the remote FTP server. (Added in 7.15.4)

  •   ssl_verify_result
  ssl认证结果,返回0表示认证成功。( The result ofthe SSL peer certificate verification that was requested. 0 means theverification was successful. (Added in 7.19.0))



运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.iyunv.com/thread-554869-1-1.html 上篇帖子: shell 格式化输出nginx的编译参数 下篇帖子: Linux Shell学习--wget命令详解
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表