天天看點

curl詳解

curl:指令行下的網站通路和驗證工具

常用參數如下:

<code>-c,–cookie-jar:将cookie寫入到檔案</code>

<code>-b,–cookie:從檔案中讀取cookie</code>

<code>-C,–</code><code>continue</code><code>-at:斷點續傳</code>

<code>-d,–data:http post方式傳送資料</code>

<code>-D,–dump-header:把header資訊寫入到檔案</code>

<code>-F,–from:模拟http表達送出資料</code>

<code>-s,–slient:減少輸出資訊</code>

<code>-o,–output:将資訊輸出到檔案</code>

<code>-O,–remote-name:按照伺服器上的檔案名,存在本地</code>

<code>–l,–</code><code>head</code><code>:僅傳回頭部資訊</code>

<code>-u,–user[user:pass]:設定http認證使用者和密碼</code>

<code>-T,–upload-</code><code>file</code><code>:上傳檔案</code>

<code>-e,–referer:指定引用位址</code>

<code>-x,–proxy:指定代理伺服器位址和端口</code>

<code>-w,–write-out:輸出指定格式内容</code>

<code>–retry:重試次數</code>

<code>–connect-timeout:指定嘗試連接配接的最大時間</code><code>/s</code>

執行個體:

抓取頁面到指定檔案,如果有亂碼可以使用iconv轉碼

<code># curl -o baidu.html www.baidu.com</code>

<code># curl -s -o baidu.html www.baidu.com |iconv -f utf-8 #減少輸出資訊</code>

模拟浏覽器頭(user-agent)

<code> </code><code># curl -A “Mozilla/52.0 (compatible;MSIE 8.0; Windows NT 6.0)” www.baidu.com</code>

處理重定向頁面

<code># curl –L http://172.16.1.10/301.&lt;a href="http://www.ttlsa.com/php/" title="php"target="_blank"&gt;php&lt;/a&gt; #預設curl是不處理重定向</code>

模拟使用者登陸,儲存cookie資訊到cookies.txt檔案,再使用cookie登陸

<code># curl -c ./cookies.txt -F NAME=user -F PWD=***URL #NAME和PWD是表單屬性不同,每個網站基本都不同</code>

<code># curl -b ./cookies.txt –o URL</code>

擷取HTTP響應頭headers

<code># curl -I http://www.baidu.com</code>

<code># curl -D ./header.txt http://www.baidu.com #将headers儲存到檔案中</code>

通路HTTP認證頁面

<code># curl -u user:pass URL</code>

通過ftp上傳和下載下傳檔案

<code># curl -T filename ftp://user:pass@ip/docs #上傳</code>

<code># curl -O ftp://user:pass@ip/filename #下載下傳</code>

curl url

檢視url的源代碼

curl -I url

檢視url的狀态碼

200

Ok

301 302

跳轉

404 403 502 503

curl -X ip:port url -I

通過代理通路url檢視狀态

curl -Iv url

檢視詳細的通路過程

curl -u username:password url

通路需要使用者密碼的網站

curl -o 名字 url

将檔案儲存為指令行中指定的檔案名的檔案中

curl -O url

使用URL中預設的檔案名儲存檔案到本地

curl在請求一個網頁的時候,可以指定user_agent

隻顯示header資訊,而不顯示網頁傳回給我們的内容

下載下傳單個檔案,預設将輸出列印到标準輸出中(STDOUT)中

通過-o/-O選項儲存下載下傳的檔案到指定的檔案中:

-o:将檔案儲存為指令行中指定的檔案名的檔案中

-O:使用URL中預設的檔案名儲存檔案到本地

1 # 将檔案下載下傳到本地并命名為mygettext.html

<code> </code><code>curl -o mygettext.html http:</code><code>//www</code><code>.gnu.org</code><code>/software/gettext/manual/gettext</code><code>.html</code>

2 # 将檔案儲存到本地并命名為gettext.html

<code>curl -O http:</code><code>//www</code><code>.gnu.org</code><code>/software/gettext/manual/gettext</code><code>.html</code>

 3# 指定代理主機和端口

<code>curl -x proxysever.</code><code>test</code><code>.com:3128 http:</code><code>//google</code><code>.com</code>

同樣可以使用轉向字元"&gt;"對輸出進行轉向輸出

同時擷取多個檔案

1 curl -O URL1 -O URL2

若同時從同一站點下載下傳多個檔案時,curl會嘗試重用連結(connection)。

通過-L選項進行重定向

預設情況下CURL不會發送HTTP Location headers(重定向).當一個被請求頁面移動到另一個站點時,會發送一個HTTP Loaction header作為請求,然後将請求重定向到新的位址上。

儲存與使用網站cookie資訊

1 # 将網站的cookies資訊儲存到sugarcookies檔案中

<code>curl -D sugarcookies http:</code><code>//localhost/sugarcrm/index</code><code>.php</code>

2 # 使用上次儲存的cookie資訊

<a href="http://localhost/sugarcrm/index.php" target="_blank"></a>

<code>curl -b sugarcookies http:</code><code>//localhost/sugarcrm/index</code><code>.php</code>

傳遞請求資料

預設curl使用GET方式請求資料,這種方式下直接通過URL傳遞資料

可以通過--data/-d 方式指定使用POST方式傳遞資料

<code>1 </code><code># GET</code>

<code>curl -u username https:</code><code>//api</code><code>.github.com</code><code>/user</code><code>?access_token=XXXXXXXXXX</code>

<code># POST</code>

<code>curl -u username --data </code><code>"param1=value1&amp;param2=value"</code> <code>https:</code><code>//api</code><code>.github.com</code>

# 也可以指定一個檔案,将該檔案中的内容當作資料傳遞給伺服器端

<code>curl --data @filename https:</code><code>//github</code><code>.api.com</code><code>/authorizations</code>

<a href="https://github.api.com/authorizations" target="_blank"></a>

注:預設情況下,通過POST方式傳遞過去的資料中若有特殊字元,首先需要将特殊字元轉義在傳遞給伺服器端,如value值中包含有空格,則需要先将空格轉換成%20,如:

<code>curl -d </code><code>"value%201"</code> <code>http:</code><code>//hostname</code><code>.com</code>

<a href="http://hostname.com/" target="_blank"></a>

在新版本的CURL中,提供了新的選項 --data-urlencode,通過該選項提供的參數會自動轉義特殊字元。

<code>curl --data-urlencode </code><code>"value 1"</code> <code>http:</code><code>//hostname</code><code>.com</code>

除了使用GET和POST協定外,還可以通過 -X 選項指定其它協定,如:

<code>curl -I -X DELETE https:</code><code>//api</code><code>.github.cim</code>

<a href="https://api.github.cim/" target="_blank"></a>

上傳檔案

<code> </code><code>curl --form </code><code>"[email protected]"</code> <code>http:</code><code>//hostname/resource</code>

本文轉自 喵來個魚 51CTO部落格,原文連結:http://blog.51cto.com/m51cto/1959179,如需轉載請自行聯系原作者