簡體   English   中英

如何在 POST 請求中發送原始數據 Python

[英]How to send raw data in a POST request Python

我要發送的正文:

update_request={
        "id": "f07de0a44c2911ea8fb2bc764e10b970",
        "user": {
            "user": "3491574055045",
            "timestamp": "1640049459",
            "signature": "YQvl1dWkN6MrHQ8xGwEQndVo2QdPSzc6EqLJslzNjy4%3D",
            "code": "test"
        }
    }

這是我現在的代碼:

url = "https://api.ordergroove.com/customer/update_customer"

headers = {
    'content-type': 'application/json'
}

body = """
    update_request={{
         "id": "f07de0a44c2911ea8fb2bc764e10b970",
         "user": {
             "timestamp": "1640049459",
             "signature": "YQvl1dWkN6MrHQ8xGwEQndVo2QdPSzc6EqLJslzNjy4%3D",
             "code": "test"
         }
     }}
"""

#Send and print response
response = requests.post(url, data=body, headers=headers)

如果我在 Postman 中運行它,雖然它工作得很好: Postman screenshot

也許......這是一個很大的也許

url = "https://api.ordergroove.com/customer/update_customer"


data = {"update_request":{
     "id": "f07de0a44c2911ea8fb2bc764e10b970",
     "user": {
         "timestamp": "1640049459",
         "signature": "YQvl1dWkN6MrHQ8xGwEQndVo2QdPSzc6EqLJslzNjy4%3D",
         "code": "test"
     }
   }
}

requests.post(url,json=data)

可能工作...

在您的情況下,您的內容類型指定 JSON,這是一種常見的正文類型,因此請求添加了一種完全不同的方式來發送 json 正文(使用 json=body 參數)。 Body 是另一種字典類型,然后會為您解析成字符串並隨請求一起發送。 x-www-form 編碼和 json 都是常見的正文類型,本質上是字典,因此它們可以經常混淆但不能互換。


data = {
"update_request":{
     "id": "f07de0a44c2911ea8fb2bc764e10b970",
     "user": {
         "timestamp": "1640049459",
         "signature": "YQvl1dWkN6MrHQ8xGwEQndVo2QdPSzc6EqLJslzNjy4%3D",
         "code": "test"
     }
   }
}

response = requests.post(url,json=data)#data=body for x-www-urlencoded form data, json=body for content-type json

在這種情況下,請求將自動添加內容類型 json header 並將字典正確格式化為字符串,而不是發送內容類型 x-www-form 編碼的內容類型 Z099FB995346F31C749F6E40DB0F

您仍然可以通過傳入 json=raw_data 將原始 json 數據用於請求,原始數據是一個字符串。 這是不受歡迎的,因為如果存在任何格式問題,服務器可能無法讀取您的請求正文。 當您可以傳入 python 字典 object 時,沒有理由這樣做,如前所示,請求將其解析為您的字符串!

import requests

url = "https://46463d29-e52d-4bb9-bdda-68f0dfd7d06d.mock.pstmn.io/test"

payload = " update_request={{\r\n         \"id\": \"f07de0a44c2911ea8fb2bc764e10b970\",\r\n         \"user\": {\r\n             \"timestamp\": \"1640049459\",\r\n             \"signature\": \"YQvl1dWkN6MrHQ8xGwEQndVo2QdPSzc6EqLJslzNjy4%3D\",\r\n             \"code\": \"test\"\r\n         }\r\n     }}"
headers = {
  'Content-Type': 'text/plain'
}

response = requests.request("GET", url, headers=headers, data=payload)

print(response.text)

您可以生成代碼形式 postman 本身

在此處輸入圖像描述

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM