Python+requests:post請求四種傳送正文方式

我們要知道post請求四種傳送正文方式首先需要先了解一下常見的四種編碼方式:
HTTP 協(xié)議規(guī)定 POST 提交的數(shù)據(jù)必須放在消息主體(entity-body)中秸妥,但協(xié)議并沒有規(guī)定數(shù)據(jù)必須使用什么編碼方式呈昔。常見的四種編碼方式如下:

?1、application/x-www-form-urlencoded

這應該是最常見的 POST 提交數(shù)據(jù)的方式了挂绰。瀏覽器的原生 form 表單,如果不設置 enctype 屬性服赎,那么最終就會以 application/x-www-form-urlencoded 方式提交數(shù)據(jù)葵蒂。請求類似于下面這樣(無關的請求頭在本文中都省略掉了):

POST http://www.example.com HTTP/1.1 Content-Type:
application/x-www-form-urlencoded;charset=utf-8
title=test&sub%5B%5D=1&sub%5B%5D=2&sub%5B%5D=3
?2、multipart/form-data

除了傳統(tǒng)的application/x-www-form-urlencoded表單重虑,我們另一個經常用到的是上傳文件用的表單践付,這種表單的類型為multipart/form-data。
  這又是一個常見的 POST 數(shù)據(jù)提交的方式嚎尤。我們使用表單上傳文件時荔仁,必須讓 form 的 enctyped 等于這個值,下面是示例

接下來我們就來說一下post請求四種傳送正文方式:

'''
遇到問題沒人解答芽死?小編創(chuàng)建了一個Python學習交流QQ群:857662006
尋找有志同道合的小伙伴乏梁,互幫互助,群里還有不錯的視頻學習教程和PDF電子書!
'''
POST http://www.example.com HTTP/1.1
Content-Type:multipart/form-data; boundary=----WebKitFormBoundaryrGKCBY7qhFd3TrwA
------WebKitFormBoundaryrGKCBY7qhFd3TrwA
Content-Disposition: form-data; name="text"
title
------WebKitFormBoundaryrGKCBY7qhFd3TrwA
Content-Disposition: form-data; name="file"; filename="chrome.png"
Content-Type: image/png
PNG ... content of chrome.png ...
------WebKitFormBoundaryrGKCBY7qhFd3TrwA--
?3关贵、application/json
  application/json 這個 Content-Type 作為響應頭大家肯定不陌生遇骑。實際上,現(xiàn)在越來越多的人把它作為請求頭揖曾,用來告訴服務端消息主體是序列化后的 JSON 字符串落萎。由于 JSON 規(guī)范的流行,除了低版本 IE 之外的各大瀏覽器都原生支持 JSON.stringify炭剪,服務端語言也都有處理 JSON 的函數(shù)练链,使用 JSON 不會遇上什么麻煩。

?4奴拦、text/xml
  它是一種使用 HTTP 作為傳輸協(xié)議媒鼓,XML 作為編碼方式的遠程調用規(guī)范。

post請求四種傳送正文方式:
(1)請求正文是application/x-www-form-urlencoded

(2)請求正文是multipart/form-data

(3)請求正文是raw

(4)請求正文是binary

(1)請求正文是application/x-www-form-urlencoded

形式:

1 requests.post(url='',data={'key1':'value1','key2':'value2'},headers={'Content-Type':'application/x-www-form-urlencoded'})
?Reqeusts支持以form表單形式發(fā)送post請求错妖,只需要將請求的參數(shù)構造成一個字典绿鸣,然后傳給requests.post()的data參數(shù)即可。

輸入:

'''
遇到問題沒人解答暂氯?小編創(chuàng)建了一個Python學習交流QQ群:857662006
尋找有志同道合的小伙伴潮模,互幫互助,群里還有不錯的視頻學習教程和PDF電子書!

url = 'http://httpbin.org/post'
d = {'key1': 'value1', 'key2': 'value2'}
r = requests.post(url, data=d)
print r.text
輸出:

[

{ 
“args”: {}, 
“data”: “”, 
“files”: {}, 
“form”: { 
“key1”: “value1”, 
“key2”: “value2” 
}, 
“headers”: { 
…… 
“Content-Type”: “application/x-www-form-urlencoded”, 
…… 
}, 
“json”: null, 
…… 
}

?可以看到痴施,請求頭中的Content-Type字段已設置為application/x-www-form-urlencoded擎厢,且d = {'key1': 'value1', 'key2': 'value2'}以form表單的形式提交到服務端究流,服務端返回的form字段即是提交的數(shù)據(jù)。

(2)請求正文是multipart/form-data

除了傳統(tǒng)的application/x-www-form-urlencoded表單动遭,我們另一個經常用到的是上傳文件用的表單梯嗽,這種表單的類型為multipart/form-data。

形式:

1 requests.post(url='',data={'key1':'value1','key2':'value2'},headers={'Content-Type':'multipart/form-data'})
?發(fā)送文件中的數(shù)據(jù)需要(安裝requests_toolbelt)

from requests_toolbelt import MultipartEncoder
import requests

m = MultipartEncoder(
    fields={'field0': 'value', 'field1': 'value',
            'field2': ('filename', open('file.py', 'rb'), 'text/plain')}
    )

r = requests.post('http://httpbin.org/post', data=m,
                  headers={'Content-Type': m.content_type})
?不需要文件

from requests_toolbelt import MultipartEncoder
import requests

m = MultipartEncoder(fields={'field0': 'value', 'field1': 'value'})

r = requests.post('http://httpbin.org/post', data=m,
                  headers={'Content-Type': m.content_type})
(3)請求正文是raw

形式:

?傳入xml格式文本
1 requests.post(url='',data='<?xml ?>',headers={'Content-Type':'text/xml'})
?傳入json格式文本
1 requests.post(url='',data=json.dumps({'key1':'value1','key2':'value2'}),headers={'Content-Type':'application/json'})
或者:

1 requests.post(url='',json={{'key1':'value1','key2':'value2'}},headers={'Content-Type':'application/json'})
?可以將一json串傳給requests.post()的data參數(shù)沽损,

輸入:

'''
遇到問題沒人解答灯节?小編創(chuàng)建了一個Python學習交流QQ群:857662006
尋找有志同道合的小伙伴,互幫互助,群里還有不錯的視頻學習教程和PDF電子書绵估!

url = 'http://httpbin.org/post'
s = json.dumps({'key1': 'value1', 'key2': 'value2'})
r = requests.post(url, data=s)
print r.text
輸出:

{ 
“args”: {}, 
“data”: “{\”key2\”: \”value2\”, \”key1\”: \”value1\”}”, 
“files”: {}, 
“form”: {}, 
“headers”: { 
…… 
“Content-Type”: “application/json”, 
…… 
}, 
“json”: { 
“key1”: “value1”, 
“key2”: “value2” 
}, 
…… 
}

(4)請求正文是binary

形式:

1 requests.post(url='',files={'file':open('test.xls','rb')},headers={'Content-Type':'binary'})
?Requests也支持以multipart形式發(fā)送post請求炎疆,只需將一文件傳給requests.post()的files參數(shù)即可。

輸入:

url = 'http://httpbin.org/post'
files = {'file': open('report.txt', 'rb')}
r = requests.post(url, files=files)
print r.text
輸出:

{ 
“args”: {}, 
“data”: “”, 
“files”: { 
“file”: “Hello world!” 
}, 
“form”: {}, 
“headers”: {…… 
“Content-Type”: “multipart/form-data; boundary=467e443f4c3d403c8559e2ebd009bf4a”, 
…… 
}, 
“json”: null, 
…… 
}

?文本文件report.txt的內容只有一行:Hello world!国裳,從請求的響應結果可以看到數(shù)據(jù)已上傳到服務端中形入。

注意:一定要注意headers的類型。

轉自: http://www.reibang.com/p/a7bd73de7d34

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末缝左,一起剝皮案震驚了整個濱河市亿遂,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌渺杉,老刑警劉巖蛇数,帶你破解...
    沈念sama閱讀 212,599評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異是越,居然都是意外死亡耳舅,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,629評論 3 385
  • 文/潘曉璐 我一進店門倚评,熙熙樓的掌柜王于貴愁眉苦臉地迎上來浦徊,“玉大人,你說我怎么就攤上這事天梧】裕” “怎么了?”我有些...
    開封第一講書人閱讀 158,084評論 0 348
  • 文/不壞的土叔 我叫張陵呢岗,是天一觀的道長冕香。 經常有香客問我,道長敷燎,這世上最難降的妖魔是什么暂筝? 我笑而不...
    開封第一講書人閱讀 56,708評論 1 284
  • 正文 為了忘掉前任箩言,我火速辦了婚禮硬贯,結果婚禮上,老公的妹妹穿的比我還像新娘陨收。我一直安慰自己饭豹,他們只是感情好鸵赖,可當我...
    茶點故事閱讀 65,813評論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著拄衰,像睡著了一般它褪。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上翘悉,一...
    開封第一講書人閱讀 50,021評論 1 291
  • 那天茫打,我揣著相機與錄音,去河邊找鬼妖混。 笑死老赤,一個胖子當著我的面吹牛,可吹牛的內容都是我干的制市。 我是一名探鬼主播抬旺,決...
    沈念sama閱讀 39,120評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼祥楣!你這毒婦竟也來了开财?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 37,866評論 0 268
  • 序言:老撾萬榮一對情侶失蹤误褪,失蹤者是張志新(化名)和其女友劉穎责鳍,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體兽间,經...
    沈念sama閱讀 44,308評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡薇搁,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,633評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了渡八。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片啃洋。...
    茶點故事閱讀 38,768評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖屎鳍,靈堂內的尸體忽然破棺而出宏娄,到底是詐尸還是另有隱情,我是刑警寧澤逮壁,帶...
    沈念sama閱讀 34,461評論 4 333
  • 正文 年R本政府宣布孵坚,位于F島的核電站,受9級特大地震影響窥淆,放射性物質發(fā)生泄漏卖宠。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 40,094評論 3 317
  • 文/蒙蒙 一忧饭、第九天 我趴在偏房一處隱蔽的房頂上張望扛伍。 院中可真熱鬧,春花似錦词裤、人聲如沸刺洒。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,850評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽逆航。三九已至鼎文,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間因俐,已是汗流浹背拇惋。 一陣腳步聲響...
    開封第一講書人閱讀 32,082評論 1 267
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留抹剩,地道東北人蚤假。 一個月前我還...
    沈念sama閱讀 46,571評論 2 362
  • 正文 我出身青樓,卻偏偏與公主長得像吧兔,于是被迫代替她去往敵國和親磷仰。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 43,666評論 2 350