Python 将dict和json传递到url

Python 将dict和json传递到url,python,json,python-requests,Python,Json,Python Requests,我必须使用在查询中同时需要JSON和非JSON的webservice端点,我不知道如何使用requests包。提供的同一代码中有http.client,由于不相关的原因,我无法访问该项目中的该包 示例代码为: 导入http.client conn=http.client.HTTPSConnection('some.url') 有效负载=“{\”一些json内容\键\:\“一些json内容\值\” headers={'content-type':“application/json”,'accept

我必须使用在查询中同时需要JSON和非JSON的webservice端点,我不知道如何使用requests包。提供的同一代码中有http.client,由于不相关的原因,我无法访问该项目中的该包

示例代码为:

导入http.client
conn=http.client.HTTPSConnection('some.url')
有效负载=“{\”一些json内容\键\:\“一些json内容\值\”
headers={'content-type':“application/json”,'accept':“application/json”}
conn.request(“POST”,“/someEndpoint?param1=value_of_param1”,有效负载,报头)
res=conn.getresponse()
data=res.read().decode('utf-8')
我尝试过的代码无效:

import requests

headers={'content-type': "application/json", 'accept': "application/json"}
params={'param1': 'value_of_param1'}
json_payload = "{\"some_json_dict_key\": \"some_json_dict_value\"}"
url = 'https://some.url/someEndpoint'
response = requests.post(url, headers=headers, data=params, json=json_payload)

然而,这似乎不起作用,我有一个例外

{'httpMessage':'Bad Request','moreInformation':'请求的正文(预期为JSON)无效,无法解码。对象{或数组[预期为]的开头。}
根据以下内容:

您也可以使用json参数(在版本2.4.2中添加)直接传递dict,而不是自己编码dict,它将自动编码:

但是您正在将一个字符串传递到
json
参数中(我承认错误消息可能更清楚)。所有其他参数都是json/dict对象。请将
json\u有效载荷
设置为实际的字典

json_payload = {"some_json_dict_key": "some_json_dict_value"}  # real dictionary, not a json string
url = 'https://some.url/someEndpoint'
response = requests.post(url, headers=headers, data=params, json=json_payload)

您必须意识到POST请求可以在两个位置传递信息:请求的主体(数据)和URL字符串(请求参数,就像GET请求一样)。在您没有完全模拟的示例中,参数位于URL字符串中,根据返回的错误消息,主体必须由单个JSON对象组成。因此,使用
params
字典获取URL参数,如下所示:

response = requests.post(url, headers=headers, params=params, data=json_payload)
这应该可以做到,除非有其他细节需要处理

response = requests.post(url, headers=headers, params=params, data=json_payload)