一、curl命令詳解
(1)curl命令作用
curl命令是一個功能強大的網絡工具,它能夠通過http、ftp等方式下載文件,也能夠上傳文件,同時支持HTTPS等眾多協議,還支持POST、cookies、認證、從指定偏移處下載部分文件、用戶代理字符串、限速、文件大小、進度條等特征。其實curl遠不止前面所說的那些功能,大家可以通過man curl閱讀手冊頁獲取更多的信息。類似的工具還有wget。curl命令使用了libcurl庫來實現,libcurl庫常用在C程序中用來處理HTTP請求,curlpp是libcurl的一個C++封裝,這幾個東西可以用在抓取網頁、網絡監控等方面的開發,而curl命令可以幫助來解決開發過程中遇到的問題。
(2)常用參數
curl命令參數很多,這里只列出我曾經用過、特別是在shell腳本中經常用到過的那些。
-a/--append 上傳文件時,附加到目標文件
-A:隨意指定自己這次訪問所宣稱的自己的瀏覽器信息
-b/--cookie <name=string/file> cookie字符串或文件讀取位置,使用option來把上次的cookie信息追加到http request里面去。
-c/--cookie-jar <file> 操作結束后把cookie寫入到這個文件中
-C/--continue-at <offset> 斷點續轉
-d/--data <data> HTTP POST方式傳送數據
--data-ascii <data> | 以ascii的方式post數據 |
--data-binary <data> | 以二進制的方式post數據 |
--negotiate | 使用HTTP身份驗證 |
--digest | 使用數字身份驗證 |
--disable-eprt | 禁止使用EPRT或LPRT |
--disable-epsv | 禁止使用EPSV |
-D/--dump-header <file> 把header信息寫入到該文件中
--egd-file <file> 為隨機數據(SSL)設置EGD socket路徑
--tcp-nodelay 使用TCP_NODELAY選項
-e/--referer <URL> 指定引用地址
-F/--form <name=content> 模擬http表單提交數據
--form-string <name=string> 模擬http表單提交數據
-G/--get 以get的方式來發送數據
-H/--header <header> 指定請求頭參數
--ignore-content-length 忽略的HTTP頭信息的長度
-i/--include 輸出時包括protocol頭信息
-I/--head 僅返回頭部信息,使用HEAD請求
-k/--insecure 允許不使用證書到SSL站點
-K/--config 指定的配置文件讀取
-l/--list-only 列出ftp目錄下的文件名稱
--limit-rate <rate> 設置傳輸速度
--local-port<NUM> 強制使用本地端口號
-m/--max-time <seconds> 指定處理的最大時長
--max-redirs <num> 設置最大讀取的目錄數
--max-filesize <bytes> 設置最大下載的文件總量
-o/--output <file> 指定輸出文件名稱
-O/--remote-name 把輸出寫到該文件中,保留遠程文件的文件名
-v/--verbose 小寫的v參數,用於打印更多信息,包括發送的請求信息,這在調試腳本是特別有用。
-s/--slient 減少輸出的信息,比如進度
--connect-timeout <seconds> 指定嘗試連接的最大時長
-x/--proxy <proxyhost[:port]> 指定代理服務器地址和端口,端口默認為1080
-u/--user <user[:password]>設置服務器的用戶和密碼
-r/--range <range>檢索來自HTTP/1.1或FTP服務器字節范圍
--range-file 讀取(SSL)的隨機文件
-R/--remote-time 在本地生成文件時,保留遠程文件時間
--retry <num> 指定重試次數
--retry-delay <seconds> 傳輸出現問題時,設置重試間隔時間
--retry-max-time <seconds> 傳輸出現問題時,設置最大重試時間
-s/--silent 靜默模式。不輸出任何東西
-S/--show-error 顯示錯誤
--socks4 <host[:port]> 用socks4代理給定主機和端口
--socks5 <host[:port]> 用socks5代理給定主機和端口
--stderr <file>
-x/--proxy <host[:port]> 在給定的端口上使用HTTP代理
-X/--request <command> 指定什么命令。curl默認的HTTP動詞是GET,使用-X參數可以支持其他動詞。
-T/--upload-file <file> 指定上傳文件路徑
(3)使用實例
1、抓取cokkie信息到一個文件中
curl -c cookie0.txt -d "username=****&password=***" http://www.kuaipan.cn/accounts/login/
2、get方法獲取信息
curl -G -I -o xsrf.txt -b cookie1.txt -c cookie2.txt http://web.kuaipan.cn/n/drive/home.tmpl/upload