【HTTP】HTTP請求體中的四種格式

神奇的洋子發表於2020-10-30

編碼後的字串

import requests

payload = '''
 report 
 Overall:良好 
 Progress: 30% 
 Problems:暫無
'''
r = requests.post("http://httpbin.org/post", 
                  data=payload.encode('utf8'))
print(r.text)

XML

如果設計者決定用 XML 格式傳輸一段資訊,用Requests庫,只需要這樣

import requests

payload = '''
<?xml version="1.0" encoding="UTF-8"?>
<WorkReport>
    <Overall>良好</Overall>
    <Progress>30%</Progress>
    <Problems>暫無</Problems>
</WorkReport>
'''

r = requests.post("http://httpbin.org/post",
                  data=payload.encode('utf8'))
print(r.text)

我們要傳遞的工作報告裡面,存在的問題有 多個,用 XML 就可以這樣表示

<?xml version="1.0" encoding="UTF-8"?>
<WorkReport>
    <Overall>良好</Overall>
    <Progress>30%</Progress>
    <Problems>
       <problem  no='1'>
        <desc>問題1....</desc>
       </problem>
       <problem  no='2'>
        <desc>問題2....</desc>
       </problem>
    
    </Problems>
</WorkReport>

urlencoded

這種格式的訊息體就是一種 鍵值對的格式存放資料,如下所示

key1=value1&key2=value2

如果引數中本身就有特殊字元,比如等號,就會被看成引數的分隔符,只需要將這些鍵值對的資料填入一個字典。

然後使用post方法的時候,指定引數 data 的值為這個字典就可以了,如下

import requests

#payload ="key1=value1&key2=value2"   可直接傳入字串
payload = {'key1': 'value1', 'key2': 'value2'}

r = requests.post("http://httpbin.org/post", data=payload)
print(r.text)

如果我們用工具抓包就可以發現 傳送的http請求如下
在這裡插入圖片描述

json

構建一個json 格式的字串,可以使用json庫的dumps方法

import requests,json

payload = {
    "Overall":"良好",
    "Progress":"30%",
    "Problems":[
        {
            "No" : 1,
            "desc": "問題1...."
        },
        {
            "No" : 2,
            "desc": "問題2...."
        },
    ]
}

r = requests.post("http://httpbin.org/post", data=json.dumps(payload))

也可以將 資料物件 直接 傳遞給post方法的 json引數,如下

r = requests.post("http://httpbin.org/post", json=payload)

相關文章