[英]How to send raw JSON data with a post request using mechanize in 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.