CURL的使用詳解
發(fā)起GET請求
-
命令后直接跟地址
curl 'https://www.baidu.com'
-
請求中拼接查詢參數
curl -G -d 'key=value' 'https://www.baidu.com'
這里就等于在瀏覽器地址欄里訪問
https://www.baidu.com?key=value
如果需要對value進行url編碼捉兴,那么可以這樣寫:
curl -G --data-urlencode 'key=value' 'https://www.baidu.com'
注意川蒙,如果沒有-G參數的話讨惩,會發(fā)起一個
POST
請求为狸,-d
指定的參數會被使用form
表單的形式提交 -
保存響應信息到一個指定文件
curl -o response.txt 'https://www.baidu.com'
-
請求中增加header
curl 'https://www.baidu.com/' \ -H 'Host: www.baidu.com' \ -H 'Accept-Language: zh-cn' \ -H 'Referer: https://www.baidu.com/'
發(fā)起POST請求
-
發(fā)起一個最簡單的POST請求
curl -X POST 'https://www.baidu.com'
-
使用form表單的形式提交數據
curl -d 'username=123&password=123' -X POST 'https://www.baidu.com'
-d
后面的內容就是request body增加了
-d
這個參數背苦,會默認的設置 headerContent-Type
為application/x-www-form-urlencoded
甚至在設置了
-d
以后互捌,-X POST
這個參數也可以省略掉潘明,請求方式默認會使用POST
方式curl -d 'username=123&password=123' 'https://www.baidu.com'
-
form表單數據拆開,更易閱讀
curl 'https://www.baidu.com' \ -d 'username=123' \ -d 'password=123'
多個參數的時候秕噪,可以每個參數用一個單獨的
-d
來指定 -
使用JSON格式提交數據
curl 'https://www.baidu.com' \ -H 'Content-Type: application/json' \ -d '{"username": "123", "password": "123"}'
-H
: 首先使用-H
指定提交的數據為json格式-d
: 是指定提交的內容钳降,這里是一個json格式的字符串 -
從文件中加載提交數據
curl -d '@data.txt' 'https://www.baidu.com'
-d
參數中使用@
符號來指定一個文件名,告訴curl加載這個文件的內容來作為請求的數據腌巾。 -
對提交的數據進行URL編碼
上面講到的
-d
參數是不會對請求的數據做任何處理的遂填,但是有的時候我們可能會提交一些待特殊字符的參數,例如網址澈蝙、空格瓢捉、問號等等丹莲,這個時候就需要對請求數據進行url編碼,curl已經提供了先編碼再提交的功能,只需要吧-d
替換為--data-urlencode
怔毛。--data-urlencode
的其他用法與-d
完全一樣。curl 'https://www.baidu.com' \ --data-urlencode 'username=123' \ --data-urlencode 'password=123'
-
上傳文件
curl -F 'file=@image.png' 'https://www.baidu.com'
-F
:利用這個參數指定要上傳的文件塘安,同時參數還會自動的設置header中的Content-Type
為multipart/form-data
-
上傳文件的同時指定MIME類型
curl -F 'file=@image.png;type=image/png' 'https://www.baidu.com'
-
上傳文件农曲,修改上傳文件的文件名
curl -F 'file=@image.png;filename=otherName.png' 'https://www.baidu.com'
cookies自動保存與發(fā)送
curl -c cookies.txt 'https://www.baidu.com' \
--data-urlencode 'username=123' \
--data-urlencode 'password=123'
curl -b cookies.txt 'https://www.baidu.com'
-c
會自動的把cookies
保存到 cookies.txt
文件中
-b
會自動的把cookies.txt
中的內容當做cookies
放到請求中
User Agent修改
-
利用 -A 參數修改
使用
-A
參數可以直接修改 User-Agent#模擬Firefox curl 'https://www.baidu.com' \ -A 'Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:60.0) Gecko/20100101 Firefox/60.0' #模擬Chrome curl 'https://www.baidu.com' \ -A 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.100 Safari/537.36' #模擬Safari curl 'https://www.baidu.com' \ -A 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.1.1 Safari/605.1.15'
-
通過 -H 修改
curl 'https://www.baidu.com' \ -H 'User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.1.1 Safari/605.1.15'
修改 Referrer
修改Referrer也有兩種方法,一種是通過-e
直接修改厉斟,另一種是通過 -H
在header中修改
curl 'https://www.baidu.com' \
-e 'https://www.baidu.com'
curl 'https://www.baidu.com' \
-H 'Referer: https://www.baidu.com'
響應重定向
默認情況下curl不響應重定向挚躯,也就是在響應碼為 3XX 的時候不會執(zhí)行重定向,需要指定-L
參數才會響應擦秽。
curl -L 'https://www.baidu.com'
靜默模式
curl -s 'https://www.baidu.com'
-s
會隱藏掉錯誤信息和進度條码荔,但是會打印響應信息。
如果也想把響應信息省略掉感挥,那么可以使用下面的命令
curl -s -o /dev/null 'https://www.baidu.com'
-o /dev/null
會丟棄響應body
如果想靜默模式的情況下缩搅,打印請求出現的錯誤,可以使用下面的命令
curl -S -s -o /dev/null 'https://www.baidu.com'
在-S
和 -s
一起用的時候链快,仍然會隱藏進度條誉己,但是當請求錯誤的時候,會打印錯誤信息域蜗。
限速
#限制訪問速度為1k
curl --limit-rate 1k 'https://www.baidu.com'
#限制訪問速度為1byte
curl --limit-rate 1 'https://www.baidu.com'
打印請求Headers
curl -v -s -o /dev/null --stderr - 'https://www.baidu.com' | grep '^>'
-v
會打印出詳細的調試信息巨双, -o /dev/null
把響應body丟棄
--stderr -
把標準的錯誤輸出轉發(fā)到標準輸出,這樣就可以使用grep
命令來做篩選了霉祸。
篩選出>開頭的行筑累,就是請求Headers
只打印響應碼
curl -w '%{response_code}' -s -o /dev/null 'https://www.baidu.com'
不驗證ssl證書
curl -k 'https://www.baidu.com'
打印響應Headers
-
只用
-i
這樣會既打印Header信息又打印Body信息curl -i https://www.baidu.com
-
只打印Header信息
curl -s -o /dev/null -D - https://www.baidu.com
-s
:作用是不展示進度條-o /dev/null
:作用是把輸出的body丟棄-D -
:作用是把headers信息轉存到一個文件中,這里的-
代表標準輸出下面這個命令看似也是只打印了header
curl -I https://www.baidu.com
但是實際這個命令是發(fā)送的
HEAD
請求丝蹭,而不是GET
或者POST
慢宗,從返回的頭信息上也可以看出來。下面的返回長度有 2443,上面的返回長度只有277镜沽。
另外敏晤,如果是一些resful風格接口,只支持
GET
或者POST
缅茉,這時候使用-I
的時候就會報404錯誤