curl 是一個很強大的命令行工具。你可以把 CURL 想象成一個精簡的命令行網頁瀏覽器。它支持幾乎你能想到的所有協議,可以交互訪問幾乎所有在線內容。唯一和瀏覽器不同的是,cURL 不會渲染接收到的相應信息。curl和wget類似也支持上傳下載等感覺比wget更強大,但我覺得用途方面更偏重于模擬網絡請求,而下載方面我更喜歡用wget,curl的用法也和wget類似!
- 查看源碼,直接curl 網址,源碼就會打印在命令行上:
curl www.baidu.com
- 也可以保存源碼 用curl -O 文件名 url:
curl -O baidu.txt wwww.baidu.com
這個和wget類似
wget -O baidu1 www.baidu.com
- 顯示網頁頭部信息 用-i,當然也會把網頁信息顯示出來
[root@VM_0_11_centos training]# curl -i www.baidu.com
HTTP/1.1 200 OK
Accept-Ranges: bytes
Cache-Control: private, no-cache, no-store, proxy-revalidate, no-transform
Connection: keep-alive
Content-Length: 2381
Content-Type: text/html
Date: Thu, 02 Apr 2020 02:14:33 GMT
Etag: "588604c8-94d"
Last-Modified: Mon, 23 Jan 2017 13:27:36 GMT
Pragma: no-cache
Server: bfe/1.0.8.18
Set-Cookie: BDORZ=27315; max-age=86400; domain=.baidu.com; path=/
<!DOCTYPE html>
xxx
</html>
- 參數 -v可以顯示通信的過程:
[root@VM_0_11_centos training]# curl -v www.baidu.com
* About to connect() to www.baidu.com port 80 (#0)
* Trying 180.101.49.11...
* Connected to www.baidu.com (180.101.49.11) port 80 (#0)
> GET / HTTP/1.1
> User-Agent: curl/7.29.0
> Host: www.baidu.com
> Accept: */*
>
< HTTP/1.1 200 OK
< Accept-Ranges: bytes
< Cache-Control: private, no-cache, no-store, proxy-revalidate, no-transform
< Connection: keep-alive
< Content-Length: 2381
< Content-Type: text/html
< Date: Thu, 02 Apr 2020 02:16:36 GMT
< Etag: "588604c8-94d"
< Last-Modified: Mon, 23 Jan 2017 13:27:36 GMT
< Pragma: no-cache
< Server: bfe/1.0.8.18
< Set-Cookie: BDORZ=27315; max-age=86400; domain=.baidu.com; path=/
<
更詳細的通信信息可以用 參數 --trance 文件名 url,具體信息保存到單獨的文件中
[root@VM_0_11_centos training]# curl --trace info.txt www.baidu.com
- htpp的動詞,例如GET POST,PUT,DELETE等,需要參數 -X
curl默認的是get請求,如果發送POSt請求
curl -X POST www.baidu.com
發送表單的時候,GET很簡單 只需要把數據拼接到url后面就行
curl www.baidu.com?data=xxx&data1=xxx
POST也不難
curl -X POST --data "data=xxx" example.com/form.cgi
POST發送請求的數據體可以用-d
$ curl -d'login=emma&password=123'-X POST https://google.com/login
或者
$ curl -d 'login=emma' -d 'password=123' -X POST https://google.com/login
使用-d參數以后,HTTP 請求會自動加上標頭Content-Type : Application/x-www-form-urlencoded。并且會自動將請求轉為 POST 方法,因此可以省略-X POST。-d參數可以讀取本地文本文件的數據,向服務器發送。
$ curl -d '@data.txt' https://google.com/login
上面命令讀取data.txt文件的內容,作為數據體向服務器發送。
- 文件上傳: 假定文件上傳的表單是下面這樣:
<form method="POST" enctype='multipart/form-data' action="upload.cgi">
<input type=file name=upload>
<input type=submit name=press value="OK">
</form>
curl上傳就應該是:
curl --form upload=@localfilename --form press=OK [URL]
- --referer參數表示的是你從哪個頁面來的
[root@VM_0_11_centos training]# curl --referer www.baidu.com www.baidu.com
- User Agent字段,這個字段表示的是客戶端設備的信息,服務器可能會根據這個User Agent字段來判斷是手機還是電腦
curl --user-agent " xx" url
比如iphone
Mozilla/5.0 (iPhone; U; CPU iPhone OS 4_3_3 like mac OS X; en-us)
AppleWebKit/533.17.9 (KHTML, like Gecko) Version/5.0.2 Mobile/8J2 Safari/6533.18.5
curl --user-agent "Mozilla/5.0 (iPhone; U; CPU iPhone OS 4_3_3 like Mac OS X; en-us)
AppleWebKit/533.17.9 (KHTML, like Gecko) Version/5.0.2 Mobile/8J2 Safari/6533.18.5" www.baidu.com
--user-agent 可以用-A或者-H來替代
- --cookie參數,使用--cookie可以攜帶cookie信息
curl --cookie "name=xxx" URL
`-c cookie-file`可以保存服務器返回的cookie到文件,
`-b cookie-file`可以使用這個文件作為cookie信息,進行后續的請求。
- 增加頭部信息 --header
curl --header "Content-Type:application/json" http://example.com
參考:
http://www.ruanyifeng.com/blog/2011/09/curl.html
http://www.ruanyifeng.com/blog/2019/09/curl-reference.html