当前位置:   article > 正文

curl命令介绍与使用

curl

curl,全称CommandLine URL 或 CommandLine Uniform Resource Locator,顾名思义,curl命令是在命令行方式下工作,利用URL的语法进行数据的传输或者文件的传输。

这个命令行工具现在多用于Unix和Linux操作系统,是一个开源的工具,功能十分强大。

下面是crul的官方网站,我们可以该网站获取该工具的最新版本,还有最全面的使用方法。

https://curl.haxx.se/
从官网我们可以知道,该工具支持以下30多种类型的传输方式,这当中包含多种协议。

DICT, FILE, FTP, FTPS, Gopher, HTTP, HTTPS, IMAP, IMAPS, LDAP, LDAPS, POP3, POP3S, RTMP, RTSP, SCP, SFTP, SMB, SMBS, SMTP, SMTPS, Telnet and TFTP. curl supports SSL certificates, HTTP POST, HTTP PUT, FTP uploading, HTTP form based upload, proxies, HTTP/2, cookies, user+password authentication (Basic, Plain, Digest, CRAM-MD5, NTLM, Negotiate and Kerberos), file transfer resume, proxy tunneling
最常使用的有FILE、FTP、HTTP、HTTPS等协议。

对于程序员在说,在我们开发远程服务的时候,比如http传输,SOCKET等网络编程时,这个工具能非常方便的作为你的验证工具和测试工具。

比如下面是最简单的用法,通过这种方式获取一个页面。我输入的www.baidu.com甚至还不是一个完整的URL,因为没有指明所用的协议,curl智能地进行了选择。

运行后,返回的是一个百度主页的HTML代码。

curl www.baidu.com

 本文主要还是介绍curl的一般用法,详细用法请参阅官网。
 

前言

curl是利用URL语法在命令行方式下工作的开源文件传输工具。它被广泛应用在Unix、多种Linux发行版中,并且有DOS和Win32、Win64下的移植版本。在日常的开发和问题处理中,经常会使用curl命令来测试http接口,Windows/macOS环境上有很多接口测试的工具比如Postman,但这些工具在Linux平台上使用起来相对不那么便捷。有时候当我们要测试一些外部接口时,当本地无权调用测试路径时,需要将测试建立在Linux平台,除了封装简单的请求代码进行实现外,可通过curl工具实现。当然我们平时接触curl命令最多的地方还是在Linux环境,本来curl作为常用命令应该不用多介绍,但是在使用Jenkins API做数据迁移的过程中发现自己对curl相关的命令还是不熟悉,借这个机会重新梳理一些技巧。


curl简介

curl is a tool to transfer data from or to a server, using one of the supported protocols (DICT, FILE, FTP, FTPS, GOPHER, HTTP, HTTPS, IMAP, IMAPS, LDAP, LDAPS, POP3, POP3S, RTMP, RTSP, SCP, SFTP, SMB, SMBS, SMTP, SMTPS, TELNET and TFTP). The command is designed to work without user interaction.

curl offers a busload of useful tricks like proxy support, user authentication, FTP upload, HTTP post, SSL connections, cookies, file transfer resume, Metalink, and more. As you will see below, the number of features will make your head spin!

curl 支持你做很多事情。你可以把 curl 想象成一个精简的命令行网页浏览器。它支持几乎你能想到的所有协议,可以交互访问几乎所有在线内容。唯一和浏览器不同的是,curl 不会渲染接收到的相应信息。

curl常用命令

curl 是一个利用URL语法在命令行下工作的文件传输工具。它支持文件上传和下载,所以是综合传输工具,但按传统,习惯称 curl 为下载工具。其语法格式及常见参数含义如下,

  1. # 语法
  2. curl [option] [url]
  3. # 最简单的使用,获取服务器内容,默认将输出打印到标准输出中(STDOUT)中。
  4. curl http://www.centos.org
  5. # 添加-v参数可以看到详细解析过程,通常用于debug
  6. curl -v http://www.centos.org
  7. # curl发送Get请求
  8. curl URL
  9. curl URL -O 文件绝对路径
  10. # curl发送post请求
  11. # 请求主体用json格式
  12. curl -X POST -H 'content-type: application/json' -d @json文件绝对路径 URL
  13. curl -X POST -H 'content-type: application/json' -d 'json内容' URL
  14. # 请求主体用xml格式
  15. curl -X POST -H 'content-type: application/xml' -d @xml文件绝对路径 URL
  16. curl -X POST -H 'content-type: application/xml' -d 'xml内容' URL
  17. # 设置cookies
  18. curl URL --cookie "cookie内容"
  19. curl URL --cookie-jar cookie文件绝对路径
  20. # 设置代理字符串
  21. curl URL --user-agent "代理内容"
  22. curl URL -A "代理内容"
  23. # curl限制带宽
  24. curl URL --limit-rate 速度
  25. # curl认证
  26. curl -u user:pwd URL
  27. curl -u user URL
  28. # 只打印http头部信息
  29. curl -I URL
  30. curl -head URL
  31. # 末尾参数
  32. --progress 显示进度条
  33. --silent 不现实进度条
  34. # 不需要修改/etc/hosts,curl直接解析ip请求域名
  35. # 将 http://example.com 或 https://example.com 请求指定域名解析的IP为127.0.0.1
  36. curl --resolve example.com:80:127.0.0.1 http://example.com/
  37. curl --resolve example.com:443:127.0.0.1 https://example.com/

curl接口测试

curl 可以很方便地完成对 REST API 的调用场景,比如:设置 Header,指定 HTTP 请求方法,指定 HTTP 消息体,指定权限认证信息等。通过 -v 选项也能输出 REST 请求的所有返回信息。curl 功能很强大,有很多参数,这里列出 REST 测试常用的参数:

  1. -X/--request [GET|POST|PUT|DELETE|…] 指定请求的 HTTP 方法
  2. -H/--header 指定请求的 HTTP Header
  3. -d/--data 指定请求的 HTTP 消息体(Body)
  4. -v/--verbose 输出详细的返回信息
  5. -u/--user 指定账号、密码
  6. -b/--cookie 读取 cookie
  7. # 典型的测试命令为:
  8. curl -v -X POST -H "Content-Type: application/json" http://127.0.0.1:8080/user -d'{"username":"admin","password":"admin1234"}'...
  9. # 测试get请求
  10. curl http://www.linuxidc.com/login.cgi?user=test001&password=123456
  11. # 测试post请求
  12. curl -d "user=nickwolfe&password=12345" http://www.linuxidc.com/login.cgi
  13. # 请求主体用json格式
  14. curl -X POST -H 'content-type: application/json' -d @json文件绝对路径 URL
  15. curl -X POST -H 'content-type: application/json' -d 'json内容' URL
  16. # 请求主体用xml格式
  17. curl -X POST -H 'content-type: application/xml' -d @xml文件绝对路径 URL
  18. curl -X POST -H 'content-type: application/xml' -d 'xml内容' URL
  19. # 发送post请求时需要使用-X选项,除了使用POST外,还可以使用http规范定义的其它请求谓词,如PUT,DELETE
  20. curl -XPOST url
  21. #发送post请求时,通常需要指定请求体数据。可以使用-d或--data来指定发送的请求体。
  22. curl -XPOST -d "name=leo&age=12" url
  23. # 如果需要对请求数据进行urlencode,可以使用下面的方式:
  24. curl -XPOST --data-urlencode "name=leo&age=12" url
  25. # 此外发送post请求还可以有如下几种子选项:
  26. –data-raw
  27. –data-ascii
  28. –data-binary
使用curl和Jenkins REST API
  1. # To retrieve the job config.xml
  2. curl -X GET '<jenkinshost>/job/<jobname>/config.xml' -u username:API_TOKEN -o <jobname>.xml
  3. # to use this config to create a new job
  4. curl -s -XPOST '<jenkinshost>/createItem?name=<jobname>' -u username:API_TOKEN --data-binary @<jobname>.xml -H "Content-Type:text/xml"
  5. # get all jenkins jobs
  6. curl -X GET '<jenkinshost>/api/json?pretty=true' -u username:API_TOKEN -o jobs.json
  7. # get jenkins view
  8. curl -X GET '<jenkinshost>/view/<viewname>/api/json' -u username:API_TOKEN -o view.json

curl help

  1. curl --help
  2. Usage: curl [options...] <url>
  3. Options: (H) means HTTP/HTTPS only, (F) means FTP only
  4. --anyauth Pick "any" authentication method (H)
  5. -a, --append Append to target file when uploading (F/SFTP)
  6. --basic Use HTTP Basic Authentication (H)
  7. --cacert FILE CA certificate to verify peer against (SSL)
  8. --capath DIR CA directory to verify peer against (SSL)
  9. -E, --cert CERT[:PASSWD] Client certificate file and password (SSL)
  10. --cert-status Verify the status of the server certificate (SSL)
  11. --cert-type TYPE Certificate file type (DER/PEM/ENG) (SSL)
  12. --ciphers LIST SSL ciphers to use (SSL)
  13. --compressed Request compressed response (using deflate or gzip)
  14. -K, --config FILE Read config from FILE
  15. --connect-timeout SECONDS Maximum time allowed for connection
  16. --connect-to HOST1:PORT1:HOST2:PORT2 Connect to host (network level)
  17. -C, --continue-at OFFSET Resumed transfer OFFSET
  18. -b, --cookie STRING/FILE Read cookies from STRING/FILE (H)
  19. -c, --cookie-jar FILE Write cookies to FILE after operation (H)
  20. --create-dirs Create necessary local directory hierarchy
  21. --crlf Convert LF to CRLF in upload
  22. --crlfile FILE Get a CRL list in PEM format from the given file
  23. -d, --data DATA HTTP POST data (H)
  24. --data-raw DATA HTTP POST data, '@' allowed (H)
  25. --data-ascii DATA HTTP POST ASCII data (H)
  26. --data-binary DATA HTTP POST binary data (H)
  27. --data-urlencode DATA HTTP POST data url encoded (H)
  28. --delegation STRING GSS-API delegation permission
  29. --digest Use HTTP Digest Authentication (H)
  30. --disable-eprt Inhibit using EPRT or LPRT (F)
  31. --disable-epsv Inhibit using EPSV (F)
  32. --dns-servers DNS server addrs to use: 1.1.1.1;2.2.2.2
  33. --dns-interface Interface to use for DNS requests
  34. --dns-ipv4-addr IPv4 address to use for DNS requests, dot notation
  35. --dns-ipv6-addr IPv6 address to use for DNS requests, dot notation
  36. -D, --dump-header FILE Write the received headers to FILE
  37. --egd-file FILE EGD socket path for random data (SSL)
  38. --engine ENGINE Crypto engine (use "--engine list" for list) (SSL)
  39. --expect100-timeout SECONDS How long to wait for 100-continue (H)
  40. -f, --fail Fail silently (no output at all) on HTTP errors (H)
  41. --fail-early Fail on first transfer error, do not continue
  42. --false-start Enable TLS False Start.
  43. -F, --form CONTENT Specify HTTP multipart POST data (H)
  44. --form-string STRING Specify HTTP multipart POST data (H)
  45. --ftp-account DATA Account data string (F)
  46. --ftp-alternative-to-user COMMAND String to replace "USER [name]" (F)
  47. --ftp-create-dirs Create the remote dirs if not present (F)
  48. --ftp-method [MULTICWD/NOCWD/SINGLECWD] Control CWD usage (F)
  49. --ftp-pasv Use PASV/EPSV instead of PORT (F)
  50. -P, --ftp-port ADR Use PORT with given address instead of PASV (F)
  51. --ftp-skip-pasv-ip Skip the IP address for PASV (F)
  52. --ftp-pret Send PRET before PASV (for drftpd) (F)
  53. --ftp-ssl-ccc Send CCC after authenticating (F)
  54. --ftp-ssl-ccc-mode ACTIVE/PASSIVE Set CCC mode (F)
  55. --ftp-ssl-control Require SSL/TLS for FTP login, clear for transfer (F)
  56. -G, --get Send the -d data with a HTTP GET (H)
  57. -g, --globoff Disable URL sequences and ranges using {} and []
  58. -H, --header LINE Pass custom header LINE to server (H)
  59. -I, --head Show document info only
  60. -h, --help This help text
  61. --hostpubmd5 MD5 Hex-encoded MD5 string of the host public key. (SSH)
  62. -0, --http1.0 Use HTTP 1.0 (H)
  63. --http1.1 Use HTTP 1.1 (H)
  64. --http2 Use HTTP 2 (H)
  65. --http2-prior-knowledge Use HTTP 2 without HTTP/1.1 Upgrade (H)
  66. --ignore-content-length Ignore the HTTP Content-Length header
  67. -i, --include Include protocol headers in the output (H/F)
  68. -k, --insecure Allow connections to SSL sites without certs (H)
  69. --interface INTERFACE Use network INTERFACE (or address)
  70. -4, --ipv4 Resolve name to IPv4 address
  71. -6, --ipv6 Resolve name to IPv6 address
  72. -j, --junk-session-cookies Ignore session cookies read from file (H)
  73. --keepalive-time SECONDS Wait SECONDS between keepalive probes
  74. --key KEY Private key file name (SSL/SSH)
  75. --key-type TYPE Private key file type (DER/PEM/ENG) (SSL)
  76. --krb LEVEL Enable Kerberos with security LEVEL (F)
  77. --libcurl FILE Dump libcurl equivalent code of this command line
  78. --limit-rate RATE Limit transfer speed to RATE
  79. -l, --list-only List only mode (F/POP3)
  80. --local-port RANGE Force use of RANGE for local port numbers
  81. -L, --location Follow redirects (H)
  82. --location-trusted Like '--location', and send auth to other hosts (H)
  83. --login-options OPTIONS Server login options (IMAP, POP3, SMTP)
  84. -M, --manual Display the full manual
  85. --mail-from FROM Mail from this address (SMTP)
  86. --mail-rcpt TO Mail to this/these addresses (SMTP)
  87. --mail-auth AUTH Originator address of the original email (SMTP)
  88. --max-filesize BYTES Maximum file size to download (H/F)
  89. --max-redirs NUM Maximum number of redirects allowed (H)
  90. -m, --max-time SECONDS Maximum time allowed for the transfer
  91. --metalink Process given URLs as metalink XML file
  92. --negotiate Use HTTP Negotiate (SPNEGO) authentication (H)
  93. -n, --netrc Must read .netrc for user name and password
  94. --netrc-optional Use either .netrc or URL; overrides -n
  95. --netrc-file FILE Specify FILE for netrc
  96. -:, --next Allows the following URL to use a separate set of options
  97. --no-alpn Disable the ALPN TLS extension (H)
  98. -N, --no-buffer Disable buffering of the output stream
  99. --no-keepalive Disable keepalive use on the connection
  100. --no-npn Disable the NPN TLS extension (H)
  101. --no-sessionid Disable SSL session-ID reusing (SSL)
  102. --noproxy List of hosts which do not use proxy
  103. --ntlm Use HTTP NTLM authentication (H)
  104. --ntlm-wb Use HTTP NTLM authentication with winbind (H)
  105. --oauth2-bearer TOKEN OAuth 2 Bearer Token (IMAP, POP3, SMTP)
  106. -o, --output FILE Write to FILE instead of stdout
  107. --pass PASS Pass phrase for the private key (SSL/SSH)
  108. --path-as-is Do not squash .. sequences in URL path
  109. --pinnedpubkey FILE/HASHES Public key to verify peer against (SSL)
  110. --post301 Do not switch to GET after following a 301 redirect (H)
  111. --post302 Do not switch to GET after following a 302 redirect (H)
  112. --post303 Do not switch to GET after following a 303 redirect (H)
  113. --preproxy [PROTOCOL://]HOST[:PORT] Proxy before HTTP(S) proxy
  114. -#, --progress-bar Display transfer progress as a progress bar
  115. --proto PROTOCOLS Enable/disable PROTOCOLS
  116. --proto-default PROTOCOL Use PROTOCOL for any URL missing a scheme
  117. --proto-redir PROTOCOLS Enable/disable PROTOCOLS on redirect
  118. -x, --proxy [PROTOCOL://]HOST[:PORT] Use proxy on given port
  119. --proxy-anyauth Pick "any" proxy authentication method (H)
  120. --proxy-basic Use Basic authentication on the proxy (H)
  121. --proxy-digest Use Digest authentication on the proxy (H)
  122. --proxy-cacert FILE CA certificate to verify peer against for proxy (SSL)
  123. --proxy-capath DIR CA directory to verify peer against for proxy (SSL)
  124. --proxy-cert CERT[:PASSWD] Client certificate file and password for proxy (SSL)
  125. --proxy-cert-type TYPE Certificate file type (DER/PEM/ENG) for proxy (SSL)
  126. --proxy-ciphers LIST SSL ciphers to use for proxy (SSL)
  127. --proxy-crlfile FILE Get a CRL list in PEM format from the given file for proxy
  128. --proxy-insecure Allow connections to SSL sites without certs for proxy (H)
  129. --proxy-key KEY Private key file name for proxy (SSL)
  130. --proxy-key-type TYPE Private key file type for proxy (DER/PEM/ENG) (SSL)
  131. --proxy-negotiate Use HTTP Negotiate (SPNEGO) authentication on the proxy (H)
  132. --proxy-ntlm Use NTLM authentication on the proxy (H)
  133. --proxy-header LINE Pass custom header LINE to proxy (H)
  134. --proxy-pass PASS Pass phrase for the private key for proxy (SSL)
  135. --proxy-ssl-allow-beast Allow security flaw to improve interop for proxy (SSL)
  136. --proxy-tlsv1 Use TLSv1 for proxy (SSL)
  137. --proxy-tlsuser USER TLS username for proxy
  138. --proxy-tlspassword STRING TLS password for proxy
  139. --proxy-tlsauthtype STRING TLS authentication type for proxy (default SRP)
  140. --proxy-service-name NAME SPNEGO proxy service name
  141. --service-name NAME SPNEGO service name
  142. -U, --proxy-user USER[:PASSWORD] Proxy user and password
  143. --proxy1.0 HOST[:PORT] Use HTTP/1.0 proxy on given port
  144. -p, --proxytunnel Operate through a HTTP proxy tunnel (using CONNECT)
  145. --pubkey KEY Public key file name (SSH)
  146. -Q, --quote CMD Send command(s) to server before transfer (F/SFTP)
  147. --random-file FILE File for reading random data from (SSL)
  148. -r, --range RANGE Retrieve only the bytes within RANGE
  149. --raw Do HTTP "raw"; no transfer decoding (H)
  150. -e, --referer Referer URL (H)
  151. -J, --remote-header-name Use the header-provided filename (H)
  152. -O, --remote-name Write output to a file named as the remote file
  153. --remote-name-all Use the remote file name for all URLs
  154. -R, --remote-time Set the remote file's time on the local output
  155. -X, --request COMMAND Specify request command to use
  156. --resolve HOST:PORT:ADDRESS Force resolve of HOST:PORT to ADDRESS
  157. --retry NUM Retry request NUM times if transient problems occur
  158. --retry-connrefused Retry on connection refused (use with --retry)
  159. --retry-delay SECONDS Wait SECONDS between retries
  160. --retry-max-time SECONDS Retry only within this period
  161. --sasl-ir Enable initial response in SASL authentication
  162. -S, --show-error Show error. With -s, make curl show errors when they occur
  163. -s, --silent Silent mode (don't output anything)
  164. --socks4 HOST[:PORT] SOCKS4 proxy on given host + port
  165. --socks4a HOST[:PORT] SOCKS4a proxy on given host + port
  166. --socks5 HOST[:PORT] SOCKS5 proxy on given host + port
  167. --socks5-hostname HOST[:PORT] SOCKS5 proxy, pass host name to proxy
  168. --socks5-gssapi-service NAME SOCKS5 proxy service name for GSS-API
  169. --socks5-gssapi-nec Compatibility with NEC SOCKS5 server
  170. -Y, --speed-limit RATE Stop transfers below RATE for 'speed-time' secs
  171. -y, --speed-time SECONDS Trigger 'speed-limit' abort after SECONDS (default: 30)
  172. --ssl Try SSL/TLS (FTP, IMAP, POP3, SMTP)
  173. --ssl-reqd Require SSL/TLS (FTP, IMAP, POP3, SMTP)
  174. -2, --sslv2 Use SSLv2 (SSL)
  175. -3, --sslv3 Use SSLv3 (SSL)
  176. --ssl-allow-beast Allow security flaw to improve interop (SSL)
  177. --ssl-no-revoke Disable cert revocation checks (WinSSL)
  178. --stderr FILE Where to redirect stderr (use "-" for stdout)
  179. --suppress-connect-headers Suppress proxy CONNECT response headers
  180. --tcp-nodelay Use the TCP_NODELAY option
  181. --tcp-fastopen Use TCP Fast Open
  182. -t, --telnet-option OPT=VAL Set telnet option
  183. --tftp-blksize VALUE Set TFTP BLKSIZE option (must be >512)
  184. --tftp-no-options Do not send TFTP options requests
  185. -z, --time-cond TIME Transfer based on a time condition
  186. -1, --tlsv1 Use >= TLSv1 (SSL)
  187. --tlsv1.0 Use TLSv1.0 (SSL)
  188. --tlsv1.1 Use TLSv1.1 (SSL)
  189. --tlsv1.2 Use TLSv1.2 (SSL)
  190. --tlsv1.3 Use TLSv1.3 (SSL)
  191. --tls-max VERSION Use TLS up to VERSION (SSL)
  192. --trace FILE Write a debug trace to FILE
  193. --trace-ascii FILE Like --trace, but without hex output
  194. --trace-time Add time stamps to trace/verbose output
  195. --tr-encoding Request compressed transfer encoding (H)
  196. -T, --upload-file FILE Transfer FILE to destination
  197. --url URL URL to work with
  198. -B, --use-ascii Use ASCII/text transfer
  199. -u, --user USER[:PASSWORD] Server user and password
  200. --tlsuser USER TLS username
  201. --tlspassword STRING TLS password
  202. --tlsauthtype STRING TLS authentication type (default: SRP)
  203. --unix-socket PATH Connect through this Unix domain socket
  204. --abstract-unix-socket PATH Connect to an abstract Unix domain socket
  205. -A, --user-agent STRING Send User-Agent STRING to server (H)
  206. -v, --verbose Make the operation more talkative
  207. -V, --version Show version number and quit
  208. -w, --write-out FORMAT Use output FORMAT after completion
  209. --xattr Store metadata in extended file attributes
  210. -q, --disable Disable .curlrc (must be first parameter)

curl练习

21 个 curl 命令练习

curl exercises

curl练习答案

参考文章

curl the man page

linux使用curl进行接口测试

cURL笔记

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家自动化/article/detail/198326
推荐阅读
相关标签
  

闽ICP备14008679号