網絡請求工具 cURL

網絡請求工具 cURL

html

cRUL 是一種命令行工具,做用是發出網絡請求,而後獲得和提取數據,顯示在
「標準輸出」(stdout)上面。linux

查看網頁源碼

1
$ curl baidu.com
1
2
3
<html>
<meta http-equiv="refresh" content="0;url=http://www.baidu.com/">
</html>

若是要把這個網頁保存下來,能夠使用 -o 或 --output 參數,這就至關於使用 wget
命令了。
json

1
$ curl -o file_name baidu.com

 

自動跳轉

有的網址是自動跳轉的。使用-L--location參數,curl就會跳轉到新的網址。服務器

1
$ curl -L baidu.com

 

顯示頭信息

-i 或 --include 參數能夠顯示 http response 的頭信息,連同網頁代碼一塊兒。
-I 或 --head 參數則是隻顯示 http response 的頭信息。
cookie

1
$ curl -i baidu.com

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
HTTP/1.1 200 OK
Date: Wed, 16 Aug 2017 08:21:49 GMT
Server: Apache
Last-Modified: Tue, 12 Jan 2010 13:48:00 GMT
ETag: "51-47cf7e6ee8400"
Accept-Ranges: bytes
Content-Length: 81
Cache-Control: max-age=86400
Expires: Thu, 17 Aug 2017 08:21:49 GMT
Connection: Keep-Alive
Content-Type: text/html
 
<html>
<meta http-equiv="refresh" content="0;url=http://www.baidu.com/">
</html>

顯示通訊過程

-v 或 --verbose 參數能夠顯示一次 http 通訊的整個過程,包括端口鏈接和
http request 頭信息。
網絡

1
$ curl -v baidu.com

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
* Rebuilt URL to: baidu.com/
* Trying 220.181.57.217...
* Connected to baidu.com (220.181.57.217) port 80 (#0)
> GET / HTTP/1.1
> Host: baidu.com
> User-Agent: curl/7.43.0
> Accept: */*
>
< HTTP/1.1 200 OK
< Date: Wed, 16 Aug 2017 08:24:49 GMT
< Server: Apache
< Last-Modified: Tue, 12 Jan 2010 13:48:00 GMT
< ETag: "51-47cf7e6ee8400"
< Accept-Ranges: bytes
< Content-Length: 81
< Cache-Control: max-age=86400
< Expires: Thu, 17 Aug 2017 08:24:49 GMT
< Connection: Keep-Alive
< Content-Type: text/html
<
<html>
<meta http-equiv="refresh" content="0;url=http://www.baidu.com/">
</html>
* Connection #0 to host baidu.com left intact

也能夠經過 --trace 或 --trace-ascii 命令查看更詳細通訊過程,執行後經過制定
的日誌地址查看
app

1
2
$ curl --trace ${log_path} baidu.com
$ curl --trace-ascii ${log_path} baidu.com

 

HTTP動詞

curl默認的HTTP動詞是GET,使用-X參數能夠支持其餘動詞。curl

1
$ curl -X POST baidu.com

增長頭信息

1
2
# 使用-H 或 --header 能夠起到這個做用
$ curl localhost:8002/ test -H "Content-Type:application/json"

發送表單信息

1
2
3
4
5
6
7
8
9
# GET方法比較簡單,網址後直接跟參數
$ curl localhost:8002/ test?data=xxx
# POST方法經過--data或-d參數實現
$ curl -X POST localhost:8002/ test --data "name=xxx" --data "password=xxx"
$ curl -X POST localhost:8002/ test -H "Content-Type:application/x-www-form-urlencoded" -d "name=win"
# 使用application/json 提交json數據
$ curl -X POST localhost:8002/ test -H "Content-Type:application/json" -d '{"name":"wxnacy"}'
#若是你的數據沒有通過表單編碼,還能夠讓curl爲你編碼,參數是`--data-urlencode`。
$ curl -X POST localhost:8002/ test --data-urlencode "data=1 2"

文件上傳

1
2
$ curl --form upload_field=@localfilename localhost:8002/ test
$ curl --form "upload_field=@new.txt;type=text/plain" localhost:8002/test

Referer字段

須要添加request頭信息referer標示從哪裏跳轉來的工具

1
$ curl localhost:8002/ test --referer ${from_url}

 

user-agent字段

使用 --user-agent 或 -A 能夠模擬發送 user-agent 字段
網站

1
$ curl localhost:8002/ test --user-agent "device"

 

cookie

1
2
3
4
5
6
# 發送的cookie能夠在response headers中看到
$ curl localhost:8002/ test --cookie "name=ss"
# -c 能夠保存服務器返回的cookies到文件中
$ curl localhost:8002/ test -c ${cookie_file}
# -b 能夠使用這個文件做爲cookie信息,進行後續的請求。
$ curl localhost:8002/ test -b ${cookie_file}

HTTP認證

有些網域須要HTTP認證,這時 cURL 須要用到--user -u參數。

1
2
# 這時候服務器會在頭信息中接收到Authorization字段,值爲Basic + name:pass的base64加密數值
$ curl localhost:8002/ test --user name:apss

 

參考資料

相關文章
相關標籤/搜索