![](/img/trans.png)
[英]Is there a way to form batched requests using python requests module ? I want to send multiple homogenous http API requests in a single POST request
[英]Send http post request with unicoded data using python requests
我想向 REST api 發送一個 post 請求,但是我所有的字符都是 unicode 編碼的,例如我想作為\t\e\s\t
發送的字符串test
。 無論我嘗試什么,字符串最終都是\\\t\\\e\\\s\\\t
。 我可以很容易地修改例如 Burp 中的請求,並刪除雙反斜杠,使其工作。
所以發送到網絡服務器的原始字節是\\x5c\\x5c\\x75\\x30\\x30\\x37\\x34\\x5c\\x5c\\x75\\x30\\x30\\x36\\x35\\x5c\\x5c\\x75\\x30\\x30\\x37\\x33\\x5c\\x5c\\x75\\x30\\x30\\x37\\x34
而我想要的是: \\x5c\\x75\\x30\\x30\\x37\\x34\\x5c\\x75\\x30\\x30\\x36\\x35\\x5c\\x75\\x30\\x30\\x37\\x33\\x5c\\x75\\x30\\x30\\x37\\x34
我嘗試過的一件事是:
import requests
s = 'test'
data = ''
for c in s:
data += "\\u00"+hex(ord(c))[2:].lower()
print(data)
json = {"user":data}
res = requests.post('http://127.0.0.1/api/getusers', json=json)
print(res.text)
即使我設置data = '\\x5c\\x75\\x30\\x30\\x37\\x34\\x5c\\x75\\x30\\x30\\x36\\x35\\x5c\\x75\\x30\\x30\\x37\\x33\\x5c\\x75\\x30\\x30\\x37\\x34'
仍然發送雙反斜杠( \\x5x\\x5c
)
這對我來說可以。 使用https://httpbin.davecheney.com/post
3.7 和 Requests 2.23.0 進行測試:
import requests, json
url = r"https://httpbin.davecheney.com/post"
data_raw_str = r"\u0074\u0065\u0073\u0074"
s = 'test'
data = ''
for c in s:
data += '\\u00' + hex(ord(c))[2:].lower()
#data += fr"\u{ord(c):04x}" # this works, too
json_dict = {'user': data}
r = requests.post(url, json=json_dict)
print(r)
data_returned = json.loads(r.json()['data'])['user']
print(data_raw_str)
print(data)
print(data_returned)
print(data_raw_str == data == data_returned)
print(requests.__version__)
輸出:
<Response [200]>
\u0074\u0065\u0073\u0074
\u0074\u0065\u0073\u0074
\u0074\u0065\u0073\u0074
True
2.23.0
編輯:
根據RFC 8259 - JavaScript 對象表示法 (JSON) 數據交換格式- 7. 字符串:
所有 Unicode 字符都可以放在引號內,但必須轉義的字符除外:引號、反斜杠和控制字符(U+0000 到 U+001F)。
所以反斜杠總是會被 JSON 中的另一個反斜杠轉義。
我相信手動刪除額外的反斜杠會導致服務器的 JSON 解碼器對 unicode 文字進行轉義,因此您的字符串將變成普通的舊test
。
為什么請求必須是 JSON?
如果您提出此請求,則不會添加額外的反斜杠:
requests.post(url, data=data) # data is a str
如果你提出這個請求,鍵和值是utf-8
編碼的,然后是 url 編碼的(單個反斜杠被替換為%5C
):
requests.post(url, data=json_dict)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.