Python urllib2 -> urllib3 request.urlopen

问题描述 投票:0回答:1

我需要从 urllib2 切换到 urllib3。请求有问题

python2代码:

reqdata='{"PM1OBJ1":{"FREQ":"","U_AC":"","I_AC":"","P_AC":"","P_TOTAL":""}}'
response = urllib2.urlopen('http://'+ ipaddress +'/lala.cgi' ,data=reqdata)

python3代码:

reqdata={"PM1OBJ1":{"FREQ":"","U_AC":"","I_AC":"","P_AC":"","P_TOTAL":""}}
mydata = urllib.parse.urlencode(reqdata)
mydata = mydata.encode('ascii') # data should be bytes
response = urllib.request.urlopen('http://'+ ipaddress +'/lala.cgi', mydata)

当我使用 Wireshare 进行调试时,我看到 pythen2 下的 reqdata 是作为字符串传输的。

使用 python3 看起来像:

那么我如何使用 urllib3 来获得与 urllib2 相同的输出?

python urllib2 urllib3
1个回答
0
投票

你可以使用

PoolManager
来请求,一定要正确安装urllib3,然后这里是你修改后的代码:

import urllib3
import json

ipaddress = "your_ip_address_here"
reqdata = {"PM1OBJ1": {"FREQ": "", "U_AC": "", "I_AC": "", "P_AC": "", "P_TOTAL": ""}}
headers = {'Content-Type': 'application/json'}

http = urllib3.PoolManager()
response = http.request(
    'POST',
    'http://' + ipaddress + '/lala.cgi',
    body=json.dumps(reqdata).encode('ascii'),
    headers=headers
)
© www.soinside.com 2019 - 2024. All rights reserved.