curl是一個強大的工具,可以讓你從命令行創建網絡請求。
curl是一個命令行工具,用於在網絡上傳輸數據。
它支持許多協議,包括HTTP、HTTPS、FTP、FTPS、SFTP、IMAP、SMTP、POP3等。
在調試網絡請求方面,curl是最好的工具之一。
這是一個工具,一旦你知道如何使用它,你就會再次使用。它是程序員最好的朋友。
它是通用的,可以在Linux、Mac、Windows上運行。請參考官方安裝指南在你的系統上安裝它。
有趣的事實:curl的作者和維護人員是瑞典人,因他的工作(curl和libcurl)對計算世界的貢獻而被瑞典國王授予獎項。
讓我們深入介紹一些與HTTP請求一起工作時,你最有可能執行的命令和操作。
這些示例涉及與HTTP一起工作,這是最常用的協議。
- 執行HTTP GET請求
- 獲取HTTP響應頭
- 僅獲取HTTP響應頭
- 執行HTTP POST請求
- 執行HTTP POST請求並發送JSON
- 執行HTTP PUT請求
- 跟隨重定向
- 將響應保存到文件中
- 使用HTTP驗證
- 設置不同的User Agent
- 檢查請求和響應的所有詳細信息
- 將任意瀏覽器網絡請求複製為curl命令
執行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請求。
你可以執行URL編碼的POST請求:
curl -d "option=value&something=anothervalue" -X POST https://flaviocopes.com/
在這種情況下,發送application/x-www-form-urlencoded
的Content-Type。
執行HTTP POST請求並發送JSON
與上面的示例不同,你可能希望發送JSON。
在這種情況下,你需要明確設置Content-Type頭,使用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請求相同,只需使用-X PUT
更改HTTP方法
跟隨重定向
指定L
選項後,將自動跟隨重定向響應,例如301,它指定了Location
響應頭:
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/
設置不同的User Agent
用戶代理告訴服務器發起請求的客戶端是誰。curl默認發送curl/版本
的用戶代理,如: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
…
將任意瀏覽器網絡請求複製為curl命令
在使用Chrome開發者工具檢查任意網絡請求時,你可以將該請求複製為curl命令:
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