Python3 urllib Post请求

本文分享了使用Python3的urllib库发送POST请求的实践经验,详细解析了如何正确地将JSON参数转换为字节类型,以避免常见的错误提示。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Python3 urllib Post请求

自己练手的一个小项目,使用Python3中自带的网络库urllib,发送post请求,请求参数为json字符串。

url = 'http://xxxx.com'
params = {
    a:'1',
    b:'2'
}

params = json.dumps(params)
headers = {'Accept-Charset': 'utf-8', 'Content-Type': 'application/json'}

req = urllib.request.Request(url=path, data=params, headers=headers, method='POST')
response = urllib.request.urlopen(req).read()

上面写法报错

POST data should be bytes, an iterable of bytes, or a file object. It cannot be of type str

因为urllib的Request参数不能传递字符串。

查询资料后修改为:

url = 'http://xxxx.com'
params = {
    a:'1',
    b:'2'
}

params = json.dumps(params)
headers = {'Accept-Charset': 'utf-8', 'Content-Type': 'application/json'}
//添加encode编码
params = urllib.parse.quote_plus(es_params).encode(encoding='utf-8')

req = urllib.request.Request(url=path, data=params, headers=headers, method='POST')
response = urllib.request.urlopen(req).read()

上面写法服务端报错500,参数传递的有问题。

查询资料后修改为:

url = 'http://xxxx.com'
params = {
    a:'1',
    b:'2'
}

params = json.dumps(params)
headers = {'Accept-Charset': 'utf-8', 'Content-Type': 'application/json'}
//用bytes函数转换为字节
params = bytes(es_params, 'utf8')

req = urllib.request.Request(url=path, data=params, headers=headers, method='POST')
response = urllib.request.urlopen(req).read()

大功告成。。。

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值