将response.quest.body转换为dict



使用pythonrequests库,我可以发出POST:

response = requests.post("https://httpbin.org", data = {"x": 100, "y": 200})
<Response [405]>

返回的requests.Response对象仍然保留对原始请求的引用。

response.request
<PreparedRequest [POST]>

这使我能够稍后访问请求的参数,例如:

response.request.body
'x=100&y=200'

然而,最初作为dict传递的data已经被处理成服务器能够理解的字符串。我的目标是将正文反转换为原始的dict形式。是否可以在不明确解析字符串的情况下做到这一点,例如某个库函数?

我看到这个线程的URL查询参数dictpython回答了这个问题的很大一部分,但有一点不同。在引用的问题中,urllib用于将url拆分为路径和查询字符串,并将结果转换为dict。然而,这个问题是关于解析POST请求的主体。因此,拆分不适用于此。

引用的dict-python的线程URL查询参数(Martijn Pieters的答案(确实展示了如何将查询字符串转换为dict。然而,需要传递body而不是分裂的查询,然后它就可以工作了:

dict(urllib.parse.parse_qsl(response.request.body))

所以,现在我可以自己回答这个问题了。

您可以使用它将查询字符串转换为dict

string_query = 'x=100&y=200'
dict_query  = {item.split('=')[0]:int(item.split('=')[1]) for item in string_query.split("&")}

print(dict_query)

你可以使用这个简单的功能:

def query_to_dict (query : str) -> dict:
return {item.split('=')[0]:int(item.split('=')[1]) for item in query.split("&")}

body_response = 'x=100&y=200'
dict_query = query_to_dict(body_response)
print(dict_query)

有关以下内容的详细信息:python:如何将查询字符串转换为json字符串?

最新更新