溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

curl命令的使用

發(fā)布時(shí)間:2020-06-27 10:11:57 來源:網(wǎng)絡(luò) 閱讀:8314 作者:孤雁不獨(dú)飛 欄目:開發(fā)技術(shù)

    最近公司和另外一個(gè)公司合作,該公司會(huì)定期給我們公司傳送一批對(duì)我們公司有用的產(chǎn)品信息數(shù)據(jù),并且要保存到數(shù)據(jù)庫中,以備將來所用,當(dāng)然這個(gè)任務(wù)就落在了我的身上。很快就寫好了模型(用來保存產(chǎn)品信息的數(shù)據(jù)模型)以及接口函數(shù),接口函數(shù)是以POST方式接收數(shù)據(jù),寫完接口函數(shù)后當(dāng)然就是測試了,但是之前沒測試過以post方式接收數(shù)據(jù)的api(原諒一個(gè)經(jīng)驗(yàn)不豐富的人的無知。。。),但是還是讓我找到了測試方法,不就是遠(yuǎn)程post方式提交表單嘛,網(wǎng)上很多例子,在此貼上我的代碼,其實(shí)不難,理解了幾個(gè)包的方法,這段代碼還是很好理解的,如下

#coding=utf-8
import sys, urllib2, urllib,json
user_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()

然后運(yùn)行這段代碼,發(fā)現(xiàn)如果數(shù)據(jù)格式?jīng)]錯(cuò)的話接收數(shù)據(jù)成功,而且數(shù)據(jù)庫中會(huì)生成相應(yīng)的記錄,接著就是測試修復(fù)bug,增加異常處理機(jī)制等等,盡量使它能夠處理各種在傳送數(shù)據(jù)過程中出現(xiàn)的異常。然后就去向經(jīng)理匯報(bào),演示,經(jīng)理看我演示完后,然后跟我說,這個(gè)測試代碼有點(diǎn)不專業(yè),叫我去了解一下curl命令。然后就在網(wǎng)上找資料學(xué)習(xí),發(fā)現(xiàn)它確實(shí)是一個(gè)功能很強(qiáng)大的命令,個(gè)人覺得每個(gè)web后端開發(fā)人員都應(yīng)該要掌握它。

     

curl命令可以看作是命令行瀏覽器,作用是發(fā)出網(wǎng)絡(luò)請(qǐng)求,然后得到和提交數(shù)據(jù),顯示在標(biāo)準(zhǔn)輸出上面,支持多種協(xié)議。

(1)查看網(wǎng)頁源碼

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

   curl  http://www.baidu.com 

 如果要把這個(gè)網(wǎng)頁保存下來,可以使用-o參數(shù),curl -o [文件名] URL

如果文件不存在,會(huì)自動(dòng)創(chuàng)建的,如果想同時(shí)獲取多個(gè)文件,可使用命令

curl -o [文件名1]  URL  -o [文件名2] URL

-O參數(shù),使用URL中默認(rèn)文件名保存到本地

(2) 自動(dòng)跳轉(zhuǎn)

有的網(wǎng)址是自動(dòng)跳轉(zhuǎn)的。使用-L參數(shù),curl就會(huì)跳轉(zhuǎn)到新的網(wǎng)址。

比如有些網(wǎng)址,只有登陸了才能訪問一些頁面內(nèi)容,此時(shí)加上這個(gè)參數(shù),會(huì)直接跳轉(zhuǎn)到登陸頁面,然后獲取登陸頁面的源碼

(3)顯示頭信息

-i參數(shù)可以顯示http response的頭信息,連同網(wǎng)頁代碼一起。

-I參數(shù)則只顯示頭信息

(4)顯示通信過程

-v參數(shù)可以顯示一次http通信的整個(gè)過程,包括端口連接和http request頭信息。

如果你覺得上面的信息還不夠,那么下面的命令可以查看更詳細(xì)的通信過程。

      curl --trace output.txt  URL

或者

      curl --trace-ascii output.txt  URL

運(yùn)行后,請(qǐng)打開output.txt文件查看。

(5)發(fā)送表單信息

發(fā)送表單信息有GET和POST兩種方法。GET方法相對(duì)簡單,只要把數(shù)據(jù)附在網(wǎng)址后面就行。

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

POST方法必須把數(shù)據(jù)和網(wǎng)址分開,curl就要用到--data參數(shù)。

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

 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/

如果你的數(shù)據(jù)沒有經(jīng)過表單編碼,還可以讓curl為你編碼,參數(shù)是--data-urlencode。

如果該接口需要授權(quán)才能訪問,就需要-u選項(xiàng)提供用戶名和密碼進(jìn)行授權(quán)      

curl -u username:password URL


(6)文件上傳

可以用curl這樣上傳文件:

      curl --form upload=@localfilename --form press=OK [URL]

(7)Referer字段

有時(shí)你需要在http request頭信息中,提供一個(gè)referer字段,表示你是從哪里跳轉(zhuǎn)過來的。

      curl --referer URL

(8)User Agent字段

這個(gè)字段是用來表示客戶端的設(shè)備信息。服務(wù)器有時(shí)會(huì)根據(jù)這個(gè)字段,針對(duì)不同設(shè)備,返回不同格式的網(wǎng)頁,比如手機(jī)版和桌面版。

比如下面的User Agent是

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

curl可以這樣模擬:

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

(9)cookie

使用--cookie參數(shù),可以讓curl發(fā)送cookie。

      curl --cookie "name=xxx"  URL

至于具體的cookie的值,可以從http response頭信息的Set-Cookie字段中得到。

(10)增加頭信息

有時(shí)需要在http request之中,自行增加一個(gè)頭信息。--header參數(shù)就可以起到這個(gè)作用。

      curl --header "xxx: xxxxxx" URL

(11)HTTP認(rèn)證

有些網(wǎng)域需要HTTP認(rèn)證,這時(shí)curl需要用到--user/-u參數(shù),前面提到過。

      curl --use/-ur name:password  URL






向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI