curl 是一種命令行工具,作用是發出網絡請求,然后獲取數據,顯示在"標准輸出"(stdout)上面。
以下是博主整理的一些關於curl命令的基本用法。
-A/--user-agent <string> |
設置用戶代理發送給服務器 |
-b/--cookie <name=string/file> |
cookie字符串或文件讀取位置 |
-c/--cookie-jar <file> |
操作結束后把cookie寫入到這個文件中 |
-C/--continue-at <offset> |
斷點續轉 |
-D/--dump-header <file> |
把header信息寫入到該文件中 |
-e/--referer |
來源網址 |
-f/--fail |
連接失敗時不顯示http錯誤 |
-o/--output |
把輸出寫到該文件中 |
-O/--remote-name |
把輸出寫到該文件中,保留遠程文件的文件名 |
-r/--range <range> |
檢索來自HTTP/1.1或FTP服務器字節范圍 |
-s/--silent |
靜音模式。不輸出任何東西 |
-T/--upload-file <file> |
上傳文件 |
-u/--user <user[:password]> |
設置服務器的用戶和密碼 |
-w/--write-out [format] |
完成后輸出什么 |
-x/--proxy <host[:port]> |
在給定的端口上使用HTTP代理 |
-#/--progress-bar |
進度條顯示當前的傳送狀態 |
示例:
-
基本用法
# curl http://www.baidu.com
-
保存訪問的網頁
-
重定向:
# curl http://www.baidu.com >> linux.html
-
使用 -o 參數:
# curl -o linux.html http://www.baidu.com
-
當然也可以使用 -O 參數保存網頁中的文件(注意:一定要指定具體的文件)
# curl -O http://www.baidu.com/hello.sh
-
-
測試網頁返回值
# curl -o /dev/null -s -w %{http_code} www.baidu.com
顯示網頁返回狀態碼,200表示成功。詳細可見博主另外一篇:https://www.cnblogs.com/liuxia912/p/10960116.html
-
指定proxy服務器以及其端口
curl支持通過內置option:-x支持設置代理
# curl -x 192.168.0.1:10086 http://www.baidu.com
-
cookie
很多網站可以通過cookie來記錄session信息,curl可以通過內置命令來保存和使用cookie信息。
-
保存http的response里面的cookie信息。內置option:-c(小寫)
# curl -c cookie.txt http://www.baidu.com
執行之后,cookie信息就被保存到 cookie.txt 文件里面了。
-
保存http的response里面的header信息。內置option:-D
# curl -D cookied.txt http://www.baidu.com
同上。(注:-c與-D產生的cookie文件並不一致)
-
cookie使用
很多網站使用cookie去鑒定用戶訪問權限,curl通過內置option:-b
# curl -b cookiec.txt http://www.baidu.com
-
-
模擬瀏覽器訪問
在某些特定情況下,我們需要模擬訪問的瀏覽器以及版本,使用內置option:-A進行訪問
# curl -A "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.0)" http://www.baidu.com
這樣服務器端就會認為是使用IE8.0去訪問的。
-
偽造referer(盜鏈)
很多服務器在收到請求的時候,會去check referer(源網頁)。curl使用內置option:-e可以指定referer
# curl -e "www.baidu.com" http://mail.linux.com
這樣就會讓服務器其以為你是從www.baidu.com點擊某個鏈接過來的
-
下載文件
-
使用內置option:-o下載
# curl -o tieba1.jpg http:www.baidu.com/tieba1.JPG
-
使用內置option:-O下載
# curl -O http://www.baidu.com/tieba1.JPG
-
循環下載
# curl -O http://www.baidu.com/tieba[1-5].JPG
-
下載重命名
# curl -O http://www.baidu.com/{hello,bb}/tieba[1-5].JPG
由於下載的時候有名字重合的地方,會產生覆蓋。
# curl -o #1_#2.JPG http://www.baidu.com/{hello,bb}/tieba[1-5].JPG
這樣在hello/tieba1.JPG的文件下載下來就會變成hello_tieba1.JPG,其他文件依此類推,從而有效的避免了文件被覆蓋
-
分塊下載
有時候下載的東西會比較大,這個時候我們可以分段下載。使用內置option:-r
# curl -r 0-100 -o tieba1_part1.JPG http://www.baidu.com/tieba1.JPG
# curl -r 100-200 -o tieba1_part2.JPG http://www.baidu.com/tieba1.JPG
# curl -r 200- -o tieba1_part3.JPG http://www.baidu.com/tieba1.JPG
# cat tieba1_part* > tieba1.JPG</pre>
-
通過ftp下載
curl可以通過ftp下載文件,curl提供兩種從ftp中下載的語法
# curl -O -u 用戶名:密碼 ftp://www.baidu.com/tieba1.JPG
# curl -O ftp://用戶名:密碼@www.baidu.com/tieba1.JPG
-
顯示下載進度條
# curl -# -O http://www.baidu.com/tieba1.JPG
-
-
斷點續傳
如果在下載tieba1.JPG的過程中突然掉線了,可以使用以下的方式續傳
# curl -C -O http://www.baidu.com/tieba1.JPG
-
上傳文件
curl不僅僅可以下載文件,還可以上傳文件。通過內置option:-T來實現
# curl -T tieba1.JPG -u 用戶名:密碼 ftp://www.baidu.com/img/
-
顯示抓取錯誤
# curl -f http://www.baidu.com/error
- 其他
-a/--append |
上傳文件時,附加到目標文件 |
--anyauth |
可以使用"任何"身份驗證方法 |
--basic |
使用HTTP基本驗證 |
-B/--use-ascii |
使用ASCII文本傳輸 |
-d/--data <data> |
HTTP POST方式傳送數據 |
--data-ascii <data> |
以ascii的方式post數據 |
--data-binary <data> |
以二進制的方式post數據 |
--negotiate |
使用HTTP身份驗證 |
--digest |
使用數字身份驗證 |
--disable-eprt |
禁止使用EPRT或LPRT |
--disable-epsv |
禁止使用EPSV |
--egd-file <file> |
為隨機數據(SSL)設置EGD socket路徑 |
--tcp-nodelay |
使用TCP_NODELAY選項 |
-E/--cert <cert[:passwd]> |
客戶端證書文件和密碼 (SSL) |
--cert-type <type> |
證書文件類型 (DER/PEM/ENG) (SSL) |
--key <key> |
私鑰文件名 (SSL) |
--key-type <type> |
私鑰文件類型 (DER/PEM/ENG) (SSL) |
--pass <pass> |
私鑰密碼 (SSL) |
--engine <eng> |
加密引擎使用 (SSL). "--engine list" for list |
--cacert <file> |
CA證書 (SSL) |
--capath <directory> |
CA目 (made using c_rehash) to verify peer against (SSL) |
--ciphers <list> |
SSL密碼 |
--compressed |
要求返回是壓縮的形式 |
--connect-timeout <seconds> |
設置最大請求時間 |
--create-dirs |
建立本地目錄的目錄層次結構 |
--crlf |
上傳是把LF轉變成CRLF |
--ftp-create-dirs |
如果遠程目錄不存在,創建遠程目錄 |
--ftp-method [multicwd/nocwd/singlecwd] |
控制CWD的使用 |
--ftp-pasv |
使用 PASV/EPSV 代替端口 |
--ftp-skip-pasv-ip |
使用PASV的時候,忽略該IP地址 |
--ftp-ssl |
嘗試用 SSL/TLS 來進行ftp數據傳輸 |
--ftp-ssl-reqd |
要求用 SSL/TLS 來進行ftp數據傳輸 |
-F/--form <name=content> |
模擬http表單提交數據 |
-form-string <name=string> |
模擬http表單提交數據 |
-g/--globoff |
禁用網址序列和范圍使用{}和[] |
-G/--get |
以get的方式來發送數據 |
-h/--help |
幫助 |
-H/--header <line> |
自定義頭信息傳遞給服務器 |
--ignore-content-length |
忽略的HTTP頭信息的長度 |
-i/--include |
輸出時包括protocol頭信息 |
-I/--head |
只顯示文檔信息 |
-j/--junk-session-cookies |
讀取文件時忽略session cookie |
--interface <interface> |
使用指定網絡接口/地址 |
--krb4 <level> |
使用指定安全級別的krb4 |
-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> |
設置最大下載的文件總量 |
-M/--manual |
顯示全手動 |
-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 <address> |
使用端口地址,而不是使用PASV |
-Q/--quote <cmd> |
文件傳輸前,發送命令到服務器 |
--range-file |
讀取(SSL)的隨機文件 |
-R/--remote-time |
在本地生成文件時,保留遠程文件時間 |
--retry <num> |
傳輸出現問題時,重試的次數 |
--retry-delay <seconds> |
傳輸出現問題時,設置重試間隔時間 |
--retry-max-time <seconds> |
傳輸出現問題時,設置最大重試時間 |
-S/--show-error |
顯示錯誤 |
--socks4 <host[:port]> |
用socks4代理給定主機和端口 |
--socks5 <host[:port]> |
用socks5代理給定主機和端口 |
-t/--telnet-option <OPT=val> |
Telnet選項設置 |
--trace <file> |
對指定文件進行debug |
--trace-ascii <file> |
Like --跟蹤但沒有hex輸出 |
--trace-time |
跟蹤/詳細輸出時,添加時間戳 |
--url <URL> |
Spet URL to work with |
-U/--proxy-user <user[:password]> |
設置代理用戶名和密碼 |
-V/--version |
顯示版本信息 |
-X/--request <command> |
指定什么命令 |
-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 |