zoukankan      html  css  js  c++  java
  • curl命令详解

    curl 是一种命令行工具,作用是发出网络请求,然后获取数据,显示在"标准输出"(stdout)上面。它支持多种协议,下面列举其常用功能。

    一、查看网页源码

    直接在 curl 命令后加上网址,就可以看到网页源码。以网址 www.sina.com为例(选择该网址,主要因为它的网页代码较短)。

    $ curl www.sina.com
    <html>
    <head><title>301 Moved Permanently</title></head>
    <body bgcolor="white">
    <center><h1>301 Moved Permanently</h1></center>
    <hr><center>nginx</center>
    </body>
    </html>

     

    如果要把这个网页保存下来,可以使用 -o 参数:

    $ curl -o [文件名] www.sina.com

    二、自动跳转

    有的网址是自动跳转的。使用 -L 参数,curl 就会跳转到新的网址。

    $ curl -L www.sina.com

    键入上面的命令,结果自动跳转为 www.sina.com.cn

    三、显示头信息

     -i  参数可以显示 http response 的头信息,连同网页代码一起。-I 参数则只显示 http response 的头信息。

    $ curl -i www.sina.com
    HTTP/1.1 301 Moved Permanently
    Server: nginx
    Date: Tue, 23 Aug 2016 08:30:16 GMT
    Content-Type: text/html
    Location: http://www.sina.com.cn/
    Expires: Tue, 23 Aug 2016 08:32:16 GMT
    Cache-Control: max-age=120
    Age: 102
    Content-Length: 178
    X-Cache: HIT from xd33-83.sina.com.cn
    ​
    <html>
    <head><title>301 Moved Permanently</title></head>
    <body bgcolor="white">
    <center><h1>301 Moved Permanently</h1></center>
    <hr><center>nginx</center>
    </body>
    </html>

    四、显示通信过程

     -v  参数可以显示一次 http 通信的整个过程,包括端口连接和 http request 头信息。

    $ curl -v www.sina.com
    * Rebuilt URL to: www.sina.com/
    * Hostname was NOT found in DNS cache
    *   Trying 202.108.33.60...
    * Connected to www.sina.com (202.108.33.60) port 80 (#0)
    > GET / HTTP/1.1
    > User-Agent: curl/7.35.0
    > Host: www.sina.com
    > Accept: */*
    > 
    < HTTP/1.1 301 Moved Permanently
    * Server nginx is not blacklisted
    < Server: nginx
    < Date: Tue, 23 Aug 2016 08:48:14 GMT
    < Content-Type: text/html
    < Location: http://www.sina.com.cn/
    < Expires: Tue, 23 Aug 2016 08:50:14 GMT
    < Cache-Control: max-age=120
    < Age: 40
    < Content-Length: 178
    < X-Cache: HIT from xd33-81.sina.com.cn
    < 
    <html>
    <head><title>301 Moved Permanently</title></head>
    <body bgcolor="white">
    <center><h1>301 Moved Permanently</h1></center>
    <hr><center>nginx</center>
    </body>
    </html>
    * Connection #0 to host www.sina.com left intact

    如果觉得上面的信息还不够,那么下面的命令可以查看更详细的通信过程。

    $ curl --trace output.txt www.sina.com

    或者

    $ curl --trace-ascii output.txt www.sina.com

     

    运行后,打开 output.txt 文件查看。

    五、发送表单信息

    发送表单信息有 GET 和 POST 两种方法。GET 方法相对简单,只要把数据附在网址后面就行。

    $ curl example.com/form.cgi?data=xxx

    POST 方法必须把数据和网址分开,curl 就要用到 --data 或者 -d 参数。

    $ curl -X POST --data "data=xxx" example.com/form.cgi

    如果你的数据没有经过表单编码,还可以让 curl 为你编码,参数是  --data-urlencode 

    $ curl -X POST--data-urlencode "date=April 1" example.com/form.cgi

    六、HTTP动词

    curl 默认的 HTTP 动词是 GET,使用 -X 参数可以支持其他动词。

    $ curl -X POST www.example.com
    $ curl -X DELETE www.example.com

    七、User Agent字段

    这个字段是用来表示客户端的设备信息。服务器有时会根据这个字段,针对不同设备,返回不同格式的网页,比如手机版和桌面版。 浏览器的 User Agent 是:

    Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.84 Safari/537.36

    curl 可以这样模拟:

    $ curl --user-agent "[User Agent]" [URL]

    八、cookie

    使用  --cookie  参数,可以让 curl 发送 cookie。

    $ curl --cookie "name=xxx" www.example.com

    至于具体的 cookie 的值,可以从 http response 头信息的 Set-Cookie 字段中得到。

    九、增加头信息

    有时需要在 http request 之中,自行增加一个头信息。 --header  参数就可以起到这个作用。

    $ curl --header "Content-Type:application/json" http://example.com

    十、HTTP认证

    有些网域需要 HTTP 认证,这时 curl 需要用到  --user  或者  -u  参数。

    $ curl --user name:password example.com

    附录 curl 命令完整的参数

    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 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-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   Specify which config file to read
         --connect-timeout SECONDS  Maximum time allowed for connection
     -C, --continue-at OFFSET  Resumed transfer offset
     -b, --cookie STRING/FILE  String or file to read cookies from (H)
     -c, --cookie-jar FILE  Write cookies to this 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)
         --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)
     -D, --dump-header FILE  Write the headers to this file
         --egd-file FILE  EGD socket path for random data (SSL)
         --engine ENGINGE  Crypto engine (SSL). "--engine list" for list
     -f, --fail          Fail silently (no output at all) on HTTP errors (H)
     -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   Custom header to pass 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)
         --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  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 SECONDS  Interval 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 specified security level (F)
         --libcurl FILE  Dump libcurl equivalent code of this command line
         --limit-rate RATE  Limit transfer speed to this rate
    -l, --list-only     List only names of an FTP directory (F)
         --local-port RANGE  Force use of these local port numbers
    -L, --location      Follow redirects (H)
         --location-trusted like --location and send auth to other hosts (H)
    -M, --manual        Display the full manual
         --mail-from FROM  Mail from this address
         --mail-rcpt TO  Mail to this receiver(s)
         --mail-auth AUTH  Originator address of the original email
         --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 Authentication (H)
    -n, --netrc         Must read .netrc for user name and password
         --netrc-optional Use either .netrc or URL; overrides -n
         --netrc-file FILE  Set up the netrc filename to use
    -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       List of hosts which do not use proxy
         --ntlm          Use HTTP NTLM authentication (H)
    -o, --output FILE   Write output to <file> instead of stdout
         --pass 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)
         --post303       Do not switch to GET after following a 303 redirect (H)
    -#, --progress-bar  Display transfer progress as a progress bar
         --proto PROTOCOLS  Enable/disable specified protocols
         --proto-redir PROTOCOLS  Enable/disable specified 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-negotiate Use Negotiate authentication on the proxy (H)
         --proxy-ntlm    Use NTLM authentication on the proxy (H)
    -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 a range
         --raw           Do HTTP "raw", without any 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-delay SECONDS When retrying, wait this many seconds between each
         --retry-max-time SECONDS  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 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-basic  Enable username/password auth for SOCKS5 proxies
         --socks5-gssapi Enable GSS-API auth for SOCKS5 proxies
         --socks5-hostname HOST[:PORT] SOCKS5 proxy, pass host name to proxy
         --socks5-gssapi-service NAME  SOCKS5 proxy service name for gssapi
         --socks5-gssapi-nec  Compatibility with NEC SOCKS5 server
    -Y, --speed-limit RATE  Stop transfers below speed-limit for 'speed-time' secs
    -y, --speed-time SECONDS  Time for trig speed-limit abort. Defaults to 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)
         --stderr FILE   Where to redirect stderr. - means stdout
         --tcp-nodelay   Use the TCP_NODELAY option
    -t, --telnet-option OPT=VAL  Set telnet option
         --tftp-blksize VALUE  Set TFTP BLKSIZE option (must be >512)
    -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)
         --trace FILE    Write a debug trace to the given file
         --trace-ascii FILE  Like --trace but without the 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
    -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 FILE    Connect through this UNIX domain socket
    -A, --user-agent STRING  User-Agent to send to server (H)
    -v, --verbose       Make the operation more talkative
    -V, --version       Show version number and quit
    -w, --write-out FORMAT  What to output after completion
         --xattr        Store metadata in extended file attributes
    -q                 If used as the first parameter disables .curlrc

     

  • 相关阅读:
    C# 操作配置文件
    C# Excel操作类
    没有找到 mspdb100.dll 的解决办法
    工厂方法模式
    .Net互操作2
    The certificate used to sign “AppName” has either expired or has been revoked. An updated certificate is required to sign and install the application解决
    手机抓包xcode自带命令行工具配合wireshark实现
    expecting SSH2_MSG_KEX_ECDH_REPLY ssh_dispatch_run_fatal问题解决
    使用ssh-keygen设置ssh无密码登录
    远程复制文件到服务器
  • 原文地址:https://www.cnblogs.com/lizhewei/p/14506987.html
Copyright © 2011-2022 走看看