转载:https://blog.csdn.net/zhujy5/article/details/88391070
curl(CommandLine Uniform Resource Locator),即在命令行中利用URL进行数据或者文件传输。
https://curl.haxx.se/
这是curl的官网。可以从上面的官网地址下载最新的curl版本。同时可以在官网看出curl支持的各种协议(如HTTP, HTTPS, IMAP, IMAPS, LDAP, LDAPS, POP3, POP3S等)、使用途径、curl的开发支持者、以及版本信息。想深入了解curl的伙伴们,可以去官网搜寻自己关注的信息。
本篇文章主要讲述在实际开发过程中,需要用到的常用命令以及其表达的含义。
通过curl -h我们可以获取到所有curl的命令以及其用法描述。
Usage: curl [options...] <url>
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) 使用HTTP基本验证
--cacert FILE CA certificate to verify peer against (SSL)
--capath DIR CA directory to verify peer against (SSL)
-E, --cert CERT[:PASSWD] Client certificate file and password (SSL)
--cert-status Verify the status of the server certificate (SSL)
--cert-type TYPE Certificate file type (DER/PEM/ENG) (SSL)
--ciphers LIST SSL ciphers to use (SSL)
--compressed Request compressed response (using deflate or gzip)
-K, --config FILE Read config from FILE
--connect-timeout SECONDS Maximum time allowed for connection
--connect-to HOST1:PORT1:HOST2:PORT2 Connect to host (network level)
-C, --continue-at OFFSET Resumed transfer OFFSET
-b, --cookie STRING/FILE Read cookies from STRING/FILE (H)
-c, --cookie-jar FILE Write cookies to FILE after operation (H)
--create-dirs Create necessary local directory hierarchy
--crlf Convert LF to CRLF in upload
--crlfile FILE Get a CRL list in PEM format from the given file
-d, --data DATA HTTP POST data (H) HTTP POST方式传送数据
--data-raw DATA HTTP POST data, '@' allowed (H)
--data-ascii DATA HTTP POST ASCII data (H)
--data-binary DATA HTTP POST binary data (H)
--data-urlencode DATA 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)
--dns-servers DNS server addrs to use: 1.1.1.1;2.2.2.2
--dns-interface Interface to use for DNS requests
--dns-ipv4-addr IPv4 address to use for DNS requests, dot notation
--dns-ipv6-addr IPv6 address to use for DNS requests, dot notation
-D, --dump-header FILE Write the received headers to FILE
--egd-file FILE EGD socket path for random data (SSL)
--engine ENGINE Crypto engine (use "--engine list" for list) (SSL)
--expect100-timeout SECONDS How long to wait for 100-continue (H)
-f, --fail Fail silently (no output at all) on HTTP errors (H)
--fail-early Fail on first transfer error, do not continue
--false-start Enable TLS False Start.
-F, --form CONTENT Specify HTTP multipart POST data (H)
--form-string STRING Specify HTTP multipart POST data (H)
--ftp-account DATA Account data string (F)
--ftp-alternative-to-user COMMAND 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 ADR Use PORT with given address instead of PASV (F)
--ftp-skip-pasv-ip Skip the IP address for PASV (F)
--ftp-pret Send PRET before PASV (for drftpd) (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)
-G, --get Send the -d data with a HTTP GET (H)
-g, --globoff Disable URL sequences and ranges using {} and []
-H, --header LINE Pass custom header LINE to server (H)
-I, --head Show document info only
-h, --help This help text
--hostpubmd5 MD5 Hex-encoded MD5 string of the host public key. (SSH)
-0, --http1.0 Use HTTP 1.0 (H)
--http1.1 Use HTTP 1.1 (H)
--http2 Use HTTP 2 (H)
--http2-prior-knowledge Use HTTP 2 without HTTP/1.1 Upgrade (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 INTERFACE Use network INTERFACE (or address)
-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 SECONDS Wait SECONDS between keepalive probes
--key KEY Private key file name (SSL/SSH)
--key-type TYPE Private key file type (DER/PEM/ENG) (SSL)
--krb LEVEL Enable Kerberos with security LEVEL (F)
--libcurl FILE Dump libcurl equivalent code of this command line
--limit-rate RATE Limit transfer speed to RATE
-l, --list-only List only mode (F/POP3)
--local-port RANGE Force use of RANGE for local port numbers
-L, --location Follow redirects (H)
--location-trusted Like '--location', and send auth to other hosts (H)
--login-options OPTIONS Server login options (IMAP, POP3, SMTP)
-M, --manual Display the full manual
--mail-from FROM Mail from this address (SMTP)
--mail-rcpt TO Mail to this/these addresses (SMTP)
--mail-auth AUTH Originator address of the original email (SMTP)
--max-filesize BYTES Maximum file size to download (H/F)
--max-redirs NUM Maximum number of redirects allowed (H)
-m, --max-time SECONDS Maximum time allowed for the transfer
--metalink Process given URLs as metalink XML file
--negotiate Use HTTP Negotiate (SPNEGO) authentication (H)
-n, --netrc Must read .netrc for user name and password
--netrc-optional Use either .netrc or URL; overrides -n
--netrc-file FILE Specify FILE for netrc
-:, --next Allows the following URL to use a separate set of options
--no-alpn Disable the ALPN TLS extension (H)
-N, --no-buffer Disable buffering of the output stream
--no-keepalive Disable keepalive use on the connection
--no-npn Disable the NPN TLS extension (H)
--no-sessionid Disable SSL session-ID reusing (SSL)
--noproxy List of hosts which do not use proxy
--ntlm Use HTTP NTLM authentication (H)
--ntlm-wb Use HTTP NTLM authentication with winbind (H)
--oauth2-bearer TOKEN OAuth 2 Bearer Token (IMAP, POP3, SMTP)
-o, --output FILE Write to FILE instead of stdout
--pass PASS Pass phrase for the private key (SSL/SSH)
--path-as-is Do not squash .. sequences in URL path
--pinnedpubkey FILE/HASHES Public key to verify peer against (SSL)
--post301 Do not switch to GET after following a 301 redirect (H)
--post302 Do not switch to GET after following a 302 redirect (H)
--post303 Do not switch to GET after following a 303 redirect (H)
--preproxy [PROTOCOL://]HOST[:PORT] Proxy before HTTP(S) proxy
-#, --progress-bar Display transfer progress as a progress bar
--proto PROTOCOLS Enable/disable PROTOCOLS
--proto-default PROTOCOL Use PROTOCOL for any URL missing a scheme
--proto-redir PROTOCOLS Enable/disable PROTOCOLS on redirect
-x, --proxy [PROTOCOL://]HOST[:PORT] Use 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-cacert FILE CA certificate to verify peer against for proxy (SSL)
--proxy-capath DIR CA directory to verify peer against for proxy (SSL)
--proxy-cert CERT[:PASSWD] Client certificate file and password for proxy (SSL)
--proxy-cert-type TYPE Certificate file type (DER/PEM/ENG) for proxy (SSL)
--proxy-ciphers LIST SSL ciphers to use for proxy (SSL)
--proxy-crlfile FILE Get a CRL list in PEM format from the given file for proxy
--proxy-insecure Allow connections to SSL sites without certs for proxy (H)
--proxy-key KEY Private key file name for proxy (SSL)
--proxy-key-type TYPE Private key file type for proxy (DER/PEM/ENG) (SSL)
--proxy-negotiate Use HTTP Negotiate (SPNEGO) authentication on the proxy (H)
--proxy-ntlm Use NTLM authentication on the proxy (H)
--proxy-header LINE Pass custom header LINE to proxy (H)
--proxy-pass PASS Pass phrase for the private key for proxy (SSL)
--proxy-ssl-allow-beast Allow security flaw to improve interop for proxy (SSL)
--proxy-tlsv1 Use TLSv1 for proxy (SSL)
--proxy-tlsuser USER TLS username for proxy
--proxy-tlspassword STRING TLS password for proxy
--proxy-tlsauthtype STRING TLS authentication type for proxy (default SRP)
--proxy-service-name NAME SPNEGO proxy service name
--service-name NAME SPNEGO service name
-U, --proxy-user USER[:PASSWORD] Proxy user and password
--proxy1.0 HOST[:PORT] Use HTTP/1.0 proxy on given port
-p, --proxytunnel Operate through a HTTP proxy tunnel (using CONNECT)
--pubkey KEY Public key file name (SSH)
-Q, --quote CMD Send command(s) to server before transfer (F/SFTP)
--random-file FILE File for reading random data from (SSL)
-r, --range RANGE Retrieve only the bytes within RANGE
--raw Do HTTP "raw"; no transfer decoding (H)
-e, --referer Referer URL (H)
-J, --remote-header-name Use the header-provided filename (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 COMMAND Specify request command to use
--resolve HOST:PORT:ADDRESS Force resolve of HOST:PORT to ADDRESS
--retry NUM Retry request NUM times if transient problems occur
--retry-connrefused Retry on connection refused (use with --retry)
--retry-delay SECONDS Wait SECONDS between retries
--retry-max-time SECONDS Retry only within this period
--sasl-ir Enable initial response in SASL authentication
-S, --show-error Show error. With -s, make curl show errors when they occur
-s, --silent Silent mode (don't output anything)
--socks4 HOST[:PORT] SOCKS4 proxy on given host + port
--socks4a HOST[:PORT] SOCKS4a proxy on given host + port
--socks5 HOST[:PORT] SOCKS5 proxy on given host + port
--socks5-hostname HOST[:PORT] SOCKS5 proxy, pass host name to proxy
--socks5-gssapi-service NAME SOCKS5 proxy service name for GSS-API
--socks5-gssapi-nec Compatibility with NEC SOCKS5 server
-Y, --speed-limit RATE Stop transfers below RATE for 'speed-time' secs
-y, --speed-time SECONDS Trigger 'speed-limit' abort after SECONDS (default: 30)
--ssl Try SSL/TLS (FTP, IMAP, POP3, SMTP)
--ssl-reqd Require SSL/TLS (FTP, IMAP, POP3, SMTP)
-2, --sslv2 Use SSLv2 (SSL)
-3, --sslv3 Use SSLv3 (SSL)
--ssl-allow-beast Allow security flaw to improve interop (SSL)
--ssl-no-revoke Disable cert revocation checks (WinSSL)
--stderr FILE Where to redirect stderr (use "-" for stdout)
--suppress-connect-headers Suppress proxy CONNECT response headers
--tcp-nodelay Use the TCP_NODELAY option
--tcp-fastopen Use TCP Fast Open
-t, --telnet-option OPT=VAL Set telnet option
--tftp-blksize VALUE Set TFTP BLKSIZE option (must be >512)
--tftp-no-options Do not send TFTP options requests
-z, --time-cond TIME 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)
--tlsv1.3 Use TLSv1.3 (SSL)
--tls-max VERSION Use TLS up to VERSION (SSL)
--trace FILE Write a debug trace to FILE
--trace-ascii FILE Like --trace, but without hex output
--trace-time Add time stamps to trace/verbose output
--tr-encoding Request compressed transfer encoding (H)
-T, --upload-file FILE Transfer FILE to destination
--url URL URL to work with
-B, --use-ascii Use ASCII/text transfer 使用ASCII文本传输
-u, --user USER[:PASSWORD] Server user and password
--tlsuser USER TLS username
--tlspassword STRING TLS password
--tlsauthtype STRING TLS authentication type (default: SRP)
--unix-socket PATH Connect through this Unix domain socket
--abstract-unix-socket PATH Connect to an abstract Unix domain socket
-A, --user-agent STRING Send User-Agent STRING to server (H)
-v, --verbose Make the operation more talkative
-V, --version Show version number and quit
-w, --write-out FORMAT Use output FORMAT after completion
--xattr Store metadata in extended file attributes
-q, --disable Disable .curlrc (must be first parameter)
常用的几种命令做一个简单的描述。
curl url(获取该网址的文本信息)
curl www.zhujy.com
这就是获取的www.zhujy.com信息
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
body {
width: 35em;
margin: 0 auto;
font-family: Tahoma, Verdana, Arial, sans-serif;
}
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>
<p>For online documentation and support please refer to
<a href="http://nginx.org/" target="_blank" rel="external nofollow" target="_blank" rel="external nofollow" >nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/" target="_blank" rel="external nofollow" target="_blank" rel="external nofollow" >nginx.com</a>.</p>
<p><em>Thank you for using nginx.</em></p>
</body>
</html>
curl -i url(获取该网址的文本信息以及协议头部信息)
curl -i www.zhujy.com
这就是获取的www.zhujy.com文本信息以及协议头部信息。
HTTP/1.1 200 OK
Server: nginx/1.14.0
Date: Mon, 11 Mar 2019 02:06:55 GMT
Content-Type: text/html
Content-Length: 612
Last-Modified: Mon, 29 Oct 2018 09:52:22 GMT
Connection: keep-alive
ETag: "5bd6d856-264"
Accept-Ranges: bytes
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
body {
width: 35em;
margin: 0 auto;
font-family: Tahoma, Verdana, Arial, sans-serif;
}
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>
<p>For online documentation and support please refer to
<a href="http://nginx.org/" target="_blank" rel="external nofollow" target="_blank" rel="external nofollow" >nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/" target="_blank" rel="external nofollow" target="_blank" rel="external nofollow" >nginx.com</a>.</p>
<p><em>Thank you for using nginx.</em></p>
</body>
</html>
curl -x proxy url(使用代理获取网页文本信息)
curl -x 47.94.151.148:80 zhujy.com.cn
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:>
<head>
<title>Test Page for the Nginx HTTP Server on Fedora</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<style type="text/css">
/*<![CDATA[*/
body {
background-color: #fff;
color: #000;
font-size: 0.9em;
font-family: sans-serif,helvetica;
margin: 0;
padding: 0;
}
:link {
color: #c00;
}
:visited {
color: #c00;
}
a:hover {
color: #f50;
}
h1 {
text-align: center;
margin: 0;
padding: 0.6em 2em 0.4em;
background-color: #294172;
color: #fff;
font-weight: normal;
font-size: 1.75em;
border-bottom: 2px solid #000;
}
h1 strong {
font-weight: bold;
font-size: 1.5em;
}
h2 {
text-align: center;
background-color: #3C6EB4;
font-size: 1.1em;
font-weight: bold;
color: #fff;
margin: 0;
padding: 0.5em;
border-bottom: 2px solid #294172;
}
hr {
display: none;
}
.content {
padding: 1em 5em;
}
.alert {
border: 2px solid #000;
}
img {
border: 2px solid #fff;
padding: 2px;
margin: 2px;
}
a:hover img {
border: 2px solid #294172;
}
.logos {
margin: 1em;
text-align: center;
}
/*]]>*/
</style>
</head>
<body>
<h1>Welcome to <strong>nginx</strong> on Fedora!</h1>
<div class="content">
<p>This page is used to test the proper operation of the
<strong>nginx</strong> HTTP server after it has been
installed. If you can read this page, it means that the
web server installed at this site is working
properly.</p>
<div class="alert">
<h2>Website Administrator</h2>
<div class="content">
<p>This is the default <tt>index.html</tt> page that
is distributed with <strong>nginx</strong> on
Fedora. It is located in
<tt>/usr/share/nginx/html</tt>.</p>
<p>You should now put your content in a location of
your choice and edit the <tt>root</tt> configuration
directive in the <strong>nginx</strong>
configuration file
<tt>/etc/nginx/nginx.conf</tt>.</p>
</div>
</div>
<div class="logos">
<a href="http://nginx.net/" target="_blank" rel="external nofollow" ><img
src="nginx-logo.png"
alt="[ Powered by nginx ]"
width="121" height="32" /></a>
<a href="http://fedoraproject.org/" target="_blank" rel="external nofollow" ><img
src="poweredby.png"
alt="[ Powered by Fedora ]"
width="88" height="31" /></a>
</div>
</div>
</body>
</html>
curl -X POST --header"Content-Type:application/json" --data ‘{}’ url (使用post模拟json格式请求接口)
POST 指定请求方式
–header 指定请求头部信息
–data 指定json请求体数据内容
{"resultCode":"0","resultMsg":"成功","data":{"userList":[{"id":"a6fc8f27-e598-11e8-ba67-00163e14685b","name":"tom","age":"18","address":"北京1","stage":"NBA"},{"id":"24793d7c-e199-11e8-ba67-00163e14685b","name":"tom","age":"18","address":"北京3","stage":"NBA"},{"id":"247acf89-e599-11e8-ba67-00163e14685b","name":"jerry","age":"18","address":"深圳22","stage":"NBA"},{"id":"247cdafc-e599-11e8-ba67-00163e14685b","name":"james","age":"38","address":"广州d4","stage":"NBA"},{"id":"247ed96c-e599-11e8-ba67-00163e14685b","name":"curry","age":"58","address":"上海fv","stage":"NBA"},{"id":"24805b4e-e599-11e8-ba67-00163e14685b","name":"kaven","age":"78","address":"陇县","stage":"NBA"},{"id":"2481f851-e599-11e8-ba67-00163e14685b","name":"durant","age":"68","address":"富平","stage":"NBA"}]}}
curl -I url(仅返回请求头部信息)
curl -I www.zhujy.com.cn
HTTP/1.1 200 OK
Server: nginx/1.14.0
Date: Mon, 11 Mar 2019 03:34:29 GMT
Content-Type: text/html
Content-Length: 612
Last-Modified: Mon, 29 Oct 2018 09:52:22 GMT
Connection: keep-alive
ETag: "5bd6d856-264"
Accept-Ranges: bytes
Linux基础命令-curl
今天因为测试一个东西,总是用到,就先把他记下来几个简单的。以后再补充更多。从我自己理解的角度解释一下,curl是一个利用url规则,通过输入一些参数设置,来达到模仿浏览器去访问网页请求的效果。下面来介绍几个用法。
1.curl http://127.0.0.1:8083 ,这里解释下 127.0.0.1:8083是我本机上的一个http服务。可以用这个命令来验证你的主机是否能连接上这个网站。
2. curl -o eg1.txt “http://127.0.0.1:7780/object/test01” 把网页中的文件输出到本地一个文件中。可以直接理解为下载一个文件,并在本地重命名。
3. curl -O “http://127.0.0.1:7780/object/test02” 把文件内容输出到本地,并保留文件名。可以理解为直接把文件下载到本地。
4. curl -vk https://www.baidu.com 可以获取出你访问这个网站时的更多信息,比如说状态。
5. curl -T eg2.txt “http://127.0.0.1:7780/object/test09” 把文件上传到存储中。下面的500 错误请先忽略,这是程序原因,和命令无关。可以看到文件已经上传上去了。
6. curl -XPOST "http://127.0.0.1:7780/object/test10" -d "测试" 上传文件到存储中。下面的500 错误请先忽略,这是程序原因,和命令无关。可以看到文件已经上传上去了。
7. curl -XGET "http://127.0.0.1:7780/object/test10" 获取网页中的内容。
8. curl -v -o /dev/null -H "Range: bytes=0-20240000" https://qiniu.vips100.com/v3/a558115574985891fb4b1cb8cf72dba2/files/databox/?X-LENOVO-SESS-ID=68c4d908a5ab4a10bf4a4a85c3ca175a_146919_208561_meta&path_type=ent&from=&neid=767931399&rev=&aid=146919&uid=208561&src_url=2&prefix=%2Fdata&thumb_prefix=%2Fthumb&baidu=https%3A%2F%2Fcontentbj.vips100.com&r_name=bj_leoss
使用 -H “Range: bytes=0-20240000”下载文件的一部分。