curl命令的使用

來源:互聯網
上載者:User

標籤:curl   遠程post提交表單   

    最近公司和另外一個公司合作,該公司會定期給我們公司傳送一批對我們公司有用的產品資訊資料,並且要儲存到資料庫中,以備將來所用,當然這個任務就落在了我的身上。很快就寫好了模型(用來儲存產品資訊的資料模型)以及介面函數,介面函數是以POST方式接收資料,寫完介面函數後當然就是測試了,但是之前沒測試過以post方式接收資料的api(原諒一個經驗不豐富的人的無知。。。),但是還是讓我找到了測試方法,不就是遠程post方式提交表單嘛,網上很多例子,在此貼上My Code,其實不難,理解了幾個包的方法,這段代碼還是很好理解的,如下

#coding=utf-8import sys, urllib2, urllib,jsonuser_agent = ‘Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)‘headers = { ‘User-Agent‘ : user_agent }info = [  {    "id": 554888,    "code": "85317",    "partno": "xxx",    "origin": "xxx",    "product_name": "xxx",    "type": "2"  },  {  "id": 554113,    "hs_code": "8230099",    "partno": "xxx",    "origin": "xxx",    "product_name": "xxx",    "type": "2"  }]page = {"packetdata":info}page = json.dumps(page)url = ‘http://0.0.0.0:7000/api_recept_json_data/‘data = urllib.urlencode(page)req = urllib2.Request(url,data,headers)fd = urllib2.urlopen(req,data)print fd.read()

然後運行這段代碼,發現如果資料格式沒錯的話接收資料成功,而且資料庫中會產生相應的記錄,接著就是測試修複bug,增加異常處理機制等等,盡量使它能夠處理各種在傳送資料過程中出現的異常。然後就去向經理彙報,示範,經理看我示範完後,然後跟我說,這個測試代碼有點不專業,叫我去瞭解一下curl命令。然後就在網上找資料學習,發現它確實是一個功能很強大的命令,個人覺得每個web後端開發人員都應該要掌握它。

     

curl命令可以看作是命令列瀏覽器,作用是發出網路請求,然後得到和提交資料,顯示在標準輸出上面,支援多種協議。

(1)查看網頁源碼

    直接在curl命令後加上網址,就可以看到網頁源碼。我們以網址http://www.baidu.com為例,

   curl  http://www.baidu.com 

 如果要把這個網頁儲存下來,可以使用-o參數,curl -o [檔案名稱] URL

如果檔案不存在,會自動建立的,如果想同時擷取多個檔案,可使用命令

curl -o [檔案名稱1]  URL  -o [檔案名稱2] URL

-O參數,使用URL中預設檔案名稱儲存到本地

(2) 自動跳轉

有的網址是自動跳轉的。使用-L參數,curl就會跳轉到新的網址。

比如有些網址,只有登陸了才能訪問一些頁面內容,此時加上這個參數,會直接跳轉到登陸頁面,然後擷取登陸頁面的源碼

(3)顯示頭資訊

-i參數可以顯示http response的頭資訊,連同網頁代碼一起。

-I參數則只顯示頭資訊

(4)顯示通訊過程

-v參數可以顯示一次http通訊的整個過程,包括連接埠串連和http request頭資訊。

如果你覺得上面的資訊還不夠,那麼下面的命令可以查看更詳細的通訊過程。

      curl --trace output.txt  URL

或者

      curl --trace-ascii output.txt  URL

運行後,請開啟output.txt檔案查看。

(5)發送表單資訊

發送表單資訊有GET和POST兩種方法。GET方法相對簡單,只要把資料附在網址後面就行。

      curl tvbs.cc/form.cgi?data=xxx

POST方法必須把資料和網址分開,curl就要用到--data參數。

      比如上面例子可用如下形式命令

 curl --data "packetage=[{"id": 554888,"code": "85317","partno": "xxx","origin": "xxx","product_name": "xxx","type": "2"},{"id": 554113,"hs_code": "8230099","partno": "xxx","origin": "xxx","product_name": "xxx","type": "2"}]"   http://0.0.0.0:7000/api_recept_json_data/

如果你的資料沒有經過表單編碼,還可以讓curl為你編碼,參數是--data-urlencode。

如果該介面需要授權才能訪問,就需要-u選項提供使用者名稱和密碼進行授權      

curl -u username:password URL


(6)檔案上傳

可以用curl這樣上傳檔案:

      curl --form [email protected] --form press=OK [URL]

(7)Referer欄位

有時你需要在http request頭資訊中,提供一個referer欄位,表示你是從哪裡跳轉過來的。

      curl --referer URL

(8)User Agent欄位

這個欄位是用來表示用戶端的裝置資訊。伺服器有時會根據這個欄位,針對不同裝置,返回不同格式的網頁,比如手機版和案頭版。

比如下面的User Agent是

‘Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)‘

curl可以這樣類比:

      curl --user-agent "[User Agent]" [URL]

(9)cookie

使用--cookie參數,可以讓curl發送cookie。

      curl --cookie "name=xxx"  URL

至於具體的cookie的值,可以從http response頭資訊的Set-Cookie欄位中得到。

(10)增加頭資訊

有時需要在http request之中,自行增加一個頭資訊。--header參數就可以起到這個作用。

      curl --header "xxx: xxxxxx" URL

十一、HTTP認證

有些網域需要HTTP認證,這時curl需要用到--user/-u參數,前面提到過。

      curl --use/-ur name:password  URL






curl命令的使用

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.