linux curl是通過url語法在命令行下上傳或下載文件的工具軟件,它支持http,https,ftp,ftps,telnet等多種協議,常被用來抓取網頁和監控Web服務器狀態。
語法:# curl [option] [url]
常見參數:
用參數
參數 | 描述 |
---|---|
-I/--head | 只顯示傳輸文檔,經常用於測試連接本身 |
-o/--output | 把輸出寫到該文件中,必須輸入保存文件名 |
-O/--remote-name | 把輸出寫到該文件中,保留遠程文件的文件名 |
-F/--form | 模擬表單提交 |
-s/--silent | 靜默模式,不輸出任何東西 |
-S/--show-error | 顯示錯誤,在選項 -s 中,當 curl 出現錯誤時將顯示 |
-L/--location | 跟蹤重定向 |
-f/--fail | 不輸出錯誤 |
-n/--netrc | 從netrc文件中讀取用戶名和密碼 |
--netrc-optional | 使用 .netrc 或者 URL來覆蓋-n |
--ntlm | 使用 HTTP NTLM 身份驗證 |
-N/--no-buffer | 禁用緩沖輸出 |
-p/--proxytunnel | 使用HTTP代理 |
--proxy-anyauth | 選擇任一代理身份驗證方法 |
--proxy-basic | 在代理上使用基本身份驗證 |
--proxy-digest | 在代理上使用數字身份驗證 |
--proxy-ntlm | 在代理上使用ntlm身份驗證 |
-P/--ftp-port | 使用端口地址,而不是使用PASV |
-M/--manual | 顯示全手動 |
-Q/--quote | 文件傳輸前,發送命令到服務器 |
-r/--range | 檢索來自HTTP/1.1或FTP服務器字節范圍 |
--range-file | 讀取(SSL)的隨機文件 |
-R/--remote-time | 在本地生成文件時,保留遠程文件時間 |
--retry | 傳輸出現問題時,重試的次數 |
--retry-delay | 傳輸出現問題時,設置重試間隔時間 |
--retry-max-time | 傳輸出現問題時,設置最大重試時間 |
--socks4 | 用socks4代理給定主機和端口 |
--socks5 | 用socks5代理給定主機和端口 |
-t/--telnet-option | Telnet選項設置 |
--trace | 對指定文件進行debug |
--trace-ascii Like | 跟蹤但沒有hex輸出 |
--trace-time 跟蹤/ | 詳細輸出時,添加時間戳 |
-T/--upload-file | 上傳文件 |
-u/--user | 設置服務器的用戶和密碼 |
-U/--proxy-user | 設置代理用戶名和密碼 |
-V/--version | 顯示版本信息 |
-w/--write-out [format] | 什么輸出完成后 |
-x/--proxy | 在給定的端口上使用HTTP代理 |
-X/--request | 指定什么命令 |
-y/--speed-time | 放棄限速所要的時間。默認為30 |
-Y/--speed-limit | 停止傳輸速度的限制,速度時間'秒 |
-z/--time-cond | 傳送時間設置 |
-0/--http1.0 | 使用HTTP 1.0 |
-1/--tlsv1 | 使用TLSv1(SSL) |
-2/--sslv2 | 使用SSLv2的(SSL) |
-3/--sslv3 | 使用的SSLv3(SSL) |
--3p-quote | like -Q for the source URL for 3rd party transfer |
--3p-url | 使用url,進行第三方傳送 |
--3p-user | 使用用戶名和密碼,進行第三方傳送 |
-4/--ipv4 | 使用IP4 |
-6/--ipv6 | 使用IP6 |
-#/--progress-bar | 用進度條顯示當前的傳送狀態 |
常用參數分類
# 調試類
-v, --verbose 輸出信息
-q, --disable 在第一個參數位置設置后 .curlrc 的設置直接失效,這個參數會影響到 -K, --config -A, --user-agent -e, --referer
-K, --config FILE 指定配置文件
-L, --location 跟蹤重定向 (H)
# CLI顯示設置
-s, --silent Silent模式。不輸出任務內容
-S, --show-error 顯示錯誤. 在選項 -s 中,當 curl 出現錯誤時將顯示
-f, --fail 不顯示 連接失敗時HTTP錯誤信息
-i, --include 顯示 response的header (H/F)
-I, --head 僅顯示 響應文檔頭
-l, --list-only 只列出FTP目錄的名稱 (F)
-#, --progress-bar 以進度條 顯示傳輸進度
# 數據傳輸類
-X, --request [GET|POST|PUT|DELETE|…] 使用指定的 http method 例如 -X POST
-H, --header <header> 設定 request里的header 例如 -H "Content-Type: application/json"
-e, --referer 設定 referer (H)
-d, --data <data> 設定 http body 默認使用 content-type application/x-www-form-urlencoded (H)
--data-raw <data> ASCII 編碼 HTTP POST 數據 (H)
--data-binary <data> binary 編碼 HTTP POST 數據 (H)
--data-urlencode <data> url 編碼 HTTP POST 數據 (H)
-G, --get 使用 HTTP GET 方法發送 -d 數據 (H)
-F, --form <name=string> 模擬 HTTP 表單數據提交 multipart POST (H)
--form-string <name=string> 模擬 HTTP 表單數據提交 (H)
-u, --user <user:password> 使用帳戶,密碼 例如 admin:password
-b, --cookie <data> cookie 文件 (H)
-j, --junk-session-cookies 讀取文件中但忽略會話cookie (H)
-A, --user-agent user-agent設置 (H)
# 傳輸設置
-C, --continue-at OFFSET 斷點續轉
-x, --proxy [PROTOCOL://]HOST[:PORT] 在指定的端口上使用代理
-U, --proxy-user USER[:PASSWORD] 代理用戶名及密碼
# 文件操作
-T, --upload-file <file> 上傳文件
-a, --append 添加要上傳的文件 (F/SFTP)
# 輸出設置
-o, --output <file> 將輸出寫入文件,而非 stdout
-O, --remote-name 將輸出寫入遠程文件
-D, --dump-header <file> 將頭信息寫入指定的文件
-c, --cookie-jar <file> 操作結束后,要寫入 Cookies 的文件位置
一、Linux curl用法舉例:
1. linux curl抓取網頁:
抓取百度:
curl http://www.baidu.com //默認為get請求
如發現亂碼,可以使用iconv轉碼
curl http://iframe.ip138.com/ic.asp|iconv -fgb2312
2. Linux curl使用代理:
linux curl使用http代理抓取頁面:
curl -x 111.95.243.36:80 http://iframe.ip138.com/ic.asp|iconv -fgb2312
curl -x 111.95.243.36:80 -U aiezu:password http://www.baidu.com
使用socks代理抓取頁面:
curl --socks4 202.113.65.229:443 http://iframe.ip138.com/ic.asp|iconv -fgb2312
curl --socks5 202.113.65.229:443 http://iframe.ip138.com/ic.asp|iconv -fgb2312
代理服務器地址可以從爬蟲代理上獲取。
3. linux curl處理cookies
接收cookies:
curl -c /tmp/cookies http://www.baidu.com #cookies保存到/tmp/cookies文件
發送cookies:
curl -b "key1=val1;key2=val2;" http://www.baidu.com #發送cookies文本
curl -b /tmp/cookies http://www.baidu.com #從文件中讀取cookies
4. linux curl發送數據:
linux curl get方式提交數據:
curl -G -d "name=value&name2=value2" http://www.baidu.com
linux curl post方式提交數據:
curl -d "name=value&name2=value2" http://www.baidu.com #post數據
curl -d a=b&c=d&txt@/tmp/txt http://www.baidu.com #post文件
以表單的方式上傳文件:
curl -F file=@/tmp/me.txt http://www.aiezu.com
相當於設置form表單的method="POST"和enctype='multipart/form-data'兩個屬性。
5. linux curl http header處理:
設置http請求頭信息:
curl -A "Mozilla/5.0 Firefox/21.0" http://www.baidu.com #設置http請求頭User-Agent
curl -e "http://pachong.org/" http://www.baidu.com #設置http請求頭Referer
curl -H "Connection:keep-alive \n User-Agent: Mozilla/5.0" http://www.aiezu.com
設置http響應頭處理:
curl -I http://www.aiezu.com #僅僅返回header
curl -D /tmp/header http://www.aiezu.com #將http header保存到/tmp/header文件
6. linux curl認證:
curl -u aiezu:password http://www.aiezu.com #用戶名密碼認證
curl -E mycert.pem https://www.baidu.com #采用證書認證
6. 其他:
curl -# http://www.baidu.com #以“#”號輸出進度條
curl -o /tmp/aiezu http://www.baidu.com #保存http響應到/tmp/aiezu
linux 使用curl小經驗教訓:
http請求地址的url要使用""括起來。當有存在多個參數使用&連接時可能會出錯。