zoukankan      html  css  js  c++  java
  • 301 Moved Permanently

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

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

    $ curl www.sina.com

    301 Moved Permanently

    301 Moved Permanently


    nginx

    如果要把这个网页保存下来,可以使用 -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

    301 Moved Permanently

    301 Moved Permanently


    nginx
    四、显示通信过程 -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
      <
    301 Moved Permanently

    301 Moved Permanently


    nginx
    * 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 命令完整的参数
    $ curl --help
    Usage: 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 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)
    --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 headers to this file
    --egd-file FILE EGD socket path for random data (SSL)
    --engine ENGINE 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)
    --http1.1 Use HTTP 1.1 (H)
    --http2.0 Use HTTP 2.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 mode (F/POP3)
    --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 (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 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)
    --oauth2-bearer TOKEN OAuth 2 Bearer Token (IMAP, POP3, SMTP)
    -o, --output FILE Write output to 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
    --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 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)
    --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][;OPTIONS] Server user, password and login options
    --tlsuser USER TLS username
    --tlspassword STRING TLS password
    --tlsauthtype STRING TLS authentication type (default SRP)
    -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

  • 相关阅读:
    CodeForces Gym 100935G Board Game DFS
    CodeForces 493D Vasya and Chess 简单博弈
    CodeForces Gym 100935D Enormous Carpet 快速幂取模
    CodeForces Gym 100935E Pairs
    CodeForces Gym 100935C OCR (水
    CodeForces Gym 100935B Weird Cryptography
    HDU-敌兵布阵
    HDU-Minimum Inversion Number(最小逆序数)
    七月馒头
    非常可乐
  • 原文地址:https://www.cnblogs.com/enumx/p/12319767.html
Copyright © 2011-2022 走看看