您的位置:

关于urllib3的TypeError("request got values for both 'body' and 'json' parameters which are mutually exclusive")

  发布时间:2025-03-18 08:41:16
导致urllib3出现TypeError错误的原因是在请求中同时使用了 'body' 和 'json' 参数,而这两个参数是互斥的。解决方法是在同一个请求中只设置其中一个参数。若需发送JSON数据,使用 'json' 参数;若需发送原始数据,使用 'body' 参数。示例代码展示了正确的使用方式。

问题原因

导致urllib3出现TypeError("request got values for both 'body' and 'json' parameters which are mutually exclusive")错误的原因是在请求中同时使用了 'body' 和 'json' 参数,而这两个参数是互斥的。urllib3不允许在同一个请求中同时设定 'body' 和 'json' 参数。 'body' 参数通常用于传输文件或二进制数据,而 'json' 参数用于传输 JSON 格式的数据。由于这两个参数的性质不同,不能同时出现在同一个请求中。

解决方案

在使用urllib3发送HTTP请求时,出现TypeError("request got values for both 'body' and 'json' parameters which are mutually exclusive")这个错误是因为在同一个请求中同时设置了 'body' 和 'json' 参数,而这两个参数是互斥的,不能同时出现在同一个请求中。 解决这个问题的方法是只设置其中一个参数,而不是同时设置两个互斥的参数。如果要发送JSON数据,可以使用 'json' 参数;如果要发送原始数据,则可以使用 'body' 参数。 下面是使用 'json' 参数发送JSON数据的示例代码:


import urllib3
import json

http = urllib3.PoolManager()

data = {'key1': 'value1', 'key2': 'value2'}
encoded_data = json.dumps(data).encode('utf-8')

headers = {'Content-Type': 'application/json'}

response = http.request('POST', 'http://www.example.com/api', body=encoded_data, headers=headers)

print(response.data.decode('utf-8'))

通过以上代码示例,您可以避免在同一个请求中同时设置 'body' 和 'json' 参数而导致的TypeError错误。

具体例子

当使用urllib3库发送HTTP请求时,如果同时在请求中指定了 'body' 和 'json' 参数,就会触发 TypeError("request got values for both 'body' and 'json' parameters which are mutually exclusive") 的异常。这是因为 'body' 和 'json' 是互斥的参数,意味着你只能在请求中指定其中一个参数而不是两个同时指定。 要正确使用urllib3库,并避免出现这个错误,需要根据需要选择其中一个参数进行设置。如果需要发送json数据,应该使用 'json' 参数,如果需要发送其他类型的数据,则使用 'body' 参数。下面是一个关于如何正确使用urllib3的例子:


import urllib3
import json

# 创建一个连接池管理器,并指定了最大连接数和最大重试次数
http = urllib3.PoolManager(num_pools=3, maxsize=10, retries=False)

url = 'https://api.example.com/data'

# 准备要发送的JSON数据
data = {'key1': 'value1', 'key2': 'value2'}

# 将JSON数据编码
encoded_data = json.dumps(data).encode('utf-8')

# 发送POST请求,使用 'json' 参数发送JSON数据
response = http.request('POST', url, headers={'Content-Type': 'application/json'}, json=data)

# 打印响应内容
print(response.data.decode('utf-8'))

在上面的示例中,我们使用了http.request方法发送了一个POST请求,并在请求中使用了'json'参数来发送JSON数据。这样就正确避免了TypeError("request got values for both 'body' and 'json' parameters which are mutually exclusive")错误的发生。