標籤: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命令的使用