HTTP請求的curl指南

curl是一個很棒的工具,可讓您從命令行創建網絡請求

curl是一個命令行工具,可用於在網絡上傳輸數據。

它支持許多現成的協議,包括HTTP,HTTPS,FTP,FTPS,SFTP,IMAP,SMTP,POP3等。

當涉及調試網絡請求時,curl是您可以找到的最好的工具之一。

它是您一旦知道如何使用的工具之一,便會不斷得到使用。程序員最好的朋友。

它具有通用性,可以在Linux,Mac和Windows上運行。請參閱官方安裝指南將其安裝在您的系統上。

有趣的事實:curl的作者和維護者,瑞典人,由於他的工作(curl和libcurl)對計算世界的貢獻而被瑞典國王授予。

讓我們深入研究一些在處理HTTP請求時最可能要執行的命令和操作。

這些示例涉及使用最流行的協議HTTP。

執行HTTP GET請求

當您執行請求時,curl將返迴響應的主體:

curl https://flaviocopes.com/

獲取HTTP響應頭

默認情況下,響應標頭隱藏在curl的輸出中。要顯示它們,請使用i選項:

curl -i https://flaviocopes.com/

僅獲取HTTP響應標頭

使用I選項,你可以得到只要標頭,而不是響應正文:

curl -I https://flaviocopes.com/

執行HTTP POST請求

X選項可讓您更改所使用的HTTP方法。默認情況下,使用GET,它與編寫相同

curl -X GET https://flaviocopes.com/

使用-X POST將執行POST請求。

您可以執行POST請求,傳遞經過編碼的數據URL:

curl -d "option=value&something=anothervalue" -X POST https://flaviocopes.com/

在這種情況下,application/x-www-form-urlencodedContent-Type已發送。

執行HTTP POST請求以發送JSON

您可能希望發送JSON,而不是像上面的示例那樣發布經過URL編碼的數據。

在這種情況下,您需要使用H選項:

curl -d '{"option": "value", "something": "anothervalue"}' -H "Content-Type: application/json" -X POST https://flaviocopes.com/

您還可以從磁盤發送JSON文件:

curl -d "@my-file.json" -X POST https://flaviocopes.com/

執行HTTP PUT請求

該概念與POST請求的概念相同,只需使用以下命令更改HTTP方法-X PUT

跟隨重定向

像301這樣的重定向響應,它指定了Location響應標頭,然後可以通過指定L選項:

curl http://flaviocopes.com/

不會自動遵循我設置為重定向到的HTTPS版本,但這將:

curl -L http://flaviocopes.com/

將響應存儲到文件

使用o選項,您可以告訴curl將響應保存到文件:

curl -o file.html https://flaviocopes.com/

您也可以使用文件名將文件按名稱保存在服務器上O選項:

curl -O https://flaviocopes.com/index.html

使用HTTP身份驗證

如果資源需要基本HTTP身份驗證,則可以使用u傳遞user:password值的選項:

curl -u user:pass https://flaviocopes.com/

設置其他用戶代理

用戶代理告訴服務器哪個客戶端正在執行請求。默認情況下,curl發送curl/<version>用戶代理,例如:curl/7.54.0

您可以使用--user-agent選項:

curl --user-agent "my-user-agent" https://flaviocopes.com

檢查請求和響應的所有詳細信息

使用--verbose使curl輸出請求的所有詳細信息以及響應的選項:

curl --verbose -I https://flaviocopes.com/
*   Trying 178.128.202.129...
* TCP_NODELAY set
* Connected to flaviocopes.com (178.128.202.129) port 443 (#0)
* TLS 1.2 connection using TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256
* Server certificate: flaviocopes.com
* Server certificate: Let's Encrypt Authority X3
* Server certificate: DST Root CA X3
> HEAD / HTTP/1.1
> Host: flaviocopes.com
> User-Agent: curl/7.54.0
> Accept: */*
>
< HTTP/1.1 200 OK
HTTP/1.1 200 OK
< Cache-Control: public, max-age=0, must-revalidate
Cache-Control: public, max-age=0, must-revalidate
< Content-Type: text/html; charset=UTF-8
Content-Type: text/html; charset=UTF-8
< Date: Mon, 30 Jul 2018 08:08:41 GMT
Date: Mon, 30 Jul 2018 08:08:41 GMT
...

Copying any browser network request to a curl command

When inspecting any network request using the Chrome Developer Tools, you have the option to copy that request to a curl request:

curl 'https://github.com/curl/curl' -H 'Connection: keep-alive' -H 'Pragma: no-cache' -H 'Cache-Control: no-cache' -H 'Upgrade-Insecure-Requests: 1' -H 'DNT: 1' -H 'User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36' -H 'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8' -H 'Referer: https://www.google.it/' -H 'Accept-Encoding: gzip, deflate, br' -H 'Accept-Language: en-US,en;q=0.9,it;q=0.8' -H 'Cookie: _octo=GH1.1.933116459.1507545550; _ga=GA1.2.643383860.1507545550; tz=Europe%2FRome; user_session=XXXXX; __Host-user_session_same_site=YYYYYY; dotcom_user=flaviocopes; logged_in=yes; has_recent_activity=1; _gh_sess=ZZZZZZ' --compressed

More network tutorials: