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

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

1淤齐、application/x-www-form-urlencoded

這應(yīng)該是最常見的 POST 提交數(shù)據(jù)的方式了蒲列。瀏覽器的原生 form 表單蒜撮,如果不設(shè)置 enctype 屬性组底,那么最終就會以 application/x-www-form-urlencoded 方式提交數(shù)據(jù)糜工。請求類似于下面這樣(無關(guān)的請求頭在本文中都省略掉了):

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
import requests
import json
from urllib import parse

# 定義請求header
HEADERS = {'Content-Type': 'application/x-www-form-urlencoded;charset=utf-8', 'Key': '332213fa4a9d4288b5668ddd9'}
# 定義請求地址
url = "https://api.newrank.cn/api/sync/weibo/trend"
# 通過字典方式定義請求body
FormData = {"from": '2018-07-18 16:00:00', "to": '2018-07-18 18:00:00', "page": 1, "size": 1}
# 字典轉(zhuǎn)換k1=v1 & k2=v2 模式
data = parse.urlencode(FormData)
# 請求方式
content = requests.post(url=url, headers=HEADERS, data=data).text
content = json.loads(content)
print(content)

2、multipart/form-data

除了傳統(tǒng)的application/x-www-form-urlencoded表單鬼悠,我們另一個經(jīng)常用到的是上傳文件用的表單,這種表單的類型為multipart/form-data亏娜。
  這又是一個常見的 POST 數(shù)據(jù)提交的方式焕窝。我們使用表單上傳文件時,必須讓 form 的 enctyped 等于這個值维贺,下面是示例

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--
from requests_toolbelt import MultipartEncoder
multipart_data = MultipartEncoder(
fields={
"appid": "yocial_export",
"functionId": "v1_basic_external_load",
"body": '{"inviter": "hello"}',
"t": "1589955388453",
"sign":"2f1e3c25c463dd506760395c90f1407725cb4388d825074e0597a38179f8a614"
}
)
print(multipart_data.content_type)
url = " [http://api.m.jd.com/v1/basic/external/load](http://api.m.jd.com/v1/basic/external/load)"
response = requests.post(url=url,data=multipart_data,
headers={'Content-Type': multipart_data.content_type})
print(response.content)

3它掂、application/json

application/json 這個 Content-Type 作為響應(yīng)頭大家肯定不陌生。實際上溯泣,現(xiàn)在越來越多的人把它作為請求頭虐秋,用來告訴服務(wù)端消息主體是序列化后的 JSON 字符串。由于 JSON 規(guī)范的流行垃沦,除了低版本 IE 之外的各大瀏覽器都原生支持 JSON.stringify客给,服務(wù)端語言也都有處理 JSON 的函數(shù),使用 JSON 不會遇上什么麻煩肢簿。

4靶剑、text/xml

它是一種使用 HTTP 作為傳輸協(xié)議,XML 作為編碼方式的遠(yuǎn)程調(diào)用規(guī)范池充。

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

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

requests.post(url='',
data={'key1':'value1','key2':'value2'},
headers={'Content-Type':'application/x-www-form-urlencoded'})

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

requests.post(url='',
data={'key1':'value1','key2':'value2'},
headers={'Content-Type':'multipart/form-data'})
pip install requests-toolbelt

from requests_toolbelt import MultipartEncoder
import requests

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

r = requests.post('http://httpbin.org/post', data=m,
                  headers={'Content-Type': m.content_type})
 # multipart/form-data; boundary=e2cbedfe3ba94a4d81052fa81deb41a3

(3)請求正文是raw

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

(4)請求正文是binary

requests.post(url='',
files={'file':open('test.xls','rb')},
headers={'Content-Type':'binary'})
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末桩引,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子收夸,更是在濱河造成了極大的恐慌坑匠,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,376評論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件卧惜,死亡現(xiàn)場離奇詭異厘灼,居然都是意外死亡,警方通過查閱死者的電腦和手機序苏,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,126評論 2 385
  • 文/潘曉璐 我一進(jìn)店門手幢,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人忱详,你說我怎么就攤上這事围来。” “怎么了?”我有些...
    開封第一講書人閱讀 156,966評論 0 347
  • 文/不壞的土叔 我叫張陵监透,是天一觀的道長桶错。 經(jīng)常有香客問我,道長胀蛮,這世上最難降的妖魔是什么院刁? 我笑而不...
    開封第一講書人閱讀 56,432評論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮粪狼,結(jié)果婚禮上退腥,老公的妹妹穿的比我還像新娘。我一直安慰自己再榄,他們只是感情好狡刘,可當(dāng)我...
    茶點故事閱讀 65,519評論 6 385
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著困鸥,像睡著了一般嗅蔬。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上疾就,一...
    開封第一講書人閱讀 49,792評論 1 290
  • 那天澜术,我揣著相機與錄音,去河邊找鬼猬腰。 笑死鸟废,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的姑荷。 我是一名探鬼主播侮攀,決...
    沈念sama閱讀 38,933評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼厢拭!你這毒婦竟也來了兰英?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,701評論 0 266
  • 序言:老撾萬榮一對情侶失蹤供鸠,失蹤者是張志新(化名)和其女友劉穎畦贸,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體楞捂,經(jīng)...
    沈念sama閱讀 44,143評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡薄坏,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,488評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了寨闹。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片胶坠。...
    茶點故事閱讀 38,626評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖繁堡,靈堂內(nèi)的尸體忽然破棺而出沈善,到底是詐尸還是另有隱情乡数,我是刑警寧澤,帶...
    沈念sama閱讀 34,292評論 4 329
  • 正文 年R本政府宣布闻牡,位于F島的核電站净赴,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏罩润。R本人自食惡果不足惜玖翅,卻給世界環(huán)境...
    茶點故事閱讀 39,896評論 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望割以。 院中可真熱鬧金度,春花似錦、人聲如沸严沥。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,742評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽祝峻。三九已至,卻和暖如春扎筒,著一層夾襖步出監(jiān)牢的瞬間莱找,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評論 1 265
  • 我被黑心中介騙來泰國打工嗜桌, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留奥溺,地道東北人。 一個月前我還...
    沈念sama閱讀 46,324評論 2 360
  • 正文 我出身青樓骨宠,卻偏偏與公主長得像浮定,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子层亿,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,494評論 2 348

推薦閱讀更多精彩內(nèi)容