python3的urllib3和requests及问题解决

1 版本变化

Python2 之前使用 urllib2 库,在版本升级后出现问题,因为在3版本中库进行了整合,具体变动如下:
Py3.x:
 删除了Urllin2库,统一更改为Urllib
Urllib库
变化: 
在Pytho2.x中使用import urllib2——-对应的,在Python3.x中会使用import urllib.request,urllib.error。
在Pytho2.x中使用import urllib——-对应的,在Python3.x中会使用import urllib.request,urllib.error,urllib.parse。
在Pytho2.x中使用import urlparse——-对应的,在Python3.x中会使用import urllib.parse。
在Pytho2.x中使用import urlopen——-对应的,在Python3.x中会使用import urllib.request.urlopen。
在Pytho2.x中使用import urlencode——-对应的,在Python3.x中会使用import urllib.parse.urlencode。
在Pytho2.x中使用import urllib.quote——-对应的,在Python3.x中会使用import urllib.request.quote。
在Pytho2.x中使用cookielib.CookieJar——-对应的,在Python3.x中会使用http.CookieJar。
在Pytho2.x中使用urllib2.Request——-对应的,在Python3.x中会使用urllib.request.Request.

2 问题解决

在进行一个post请求时,postman 里面可以正常请求到数据,但是一模一样放到python里面就不行了,后面通过抓包发现了问题。
部分代码如下:

formdata = {
    "analyzer": "ik_smart",
    "text": text
}
data = parse.urlencode(formdata).encode(encoding='UTF8')
req = request.Request(url, headers=self.headers, data=data)
res = request.urlopen(req)
res = res.read()

以上方式会将json数据形成analyzer=ik_smart的形式,无法让接口正常解析。

修改为如下代码:

data = json.dumps(formdata)
data = bytes(data, "utf8")
req = request.Request(url, headers=self.headers, data=data)
res = request.urlopen(req)
res = res.read()

可以正常进行访问。

注:data = bytes(data, "utf8")  需要转成bytes,否则会报错。

 

你可能感兴趣的:(python)