
上QQ阅读APP看书,第一时间看更新
5.7 数据处理
我们知道urllib.request.urlopen()方法是不区分请求方式的,识别请求方式主要通过参数data是否为None。如果向服务器发送POST请求,那么参数data需要使用urllib.parse对参数内容进行处理。
Urllib在请求访问服务器的时候,如果发生数据传递,就需要对内容进行编码处理,将包含str或bytes对象的两个元素元组序列转换为百分比编码的ASCII文本字符串。如果字符串要用作POST,那么它应该被编码为字节,否则会导致TypeError错误。
Urllib发送POST请求的方法如下:

代码中urllib.parse.urlencode(data)将数据转换成字节的数据类型,而encode('utf-8')设置字节的编码格式。这里需要注意的是,编码格式主要根据网站的编码格式来决定。urlencode()的作用只是对请求参数做数据格式转换处理。
除此之外,Urllib还提供quote()和unquote()对URL编码处理,使用方法如下:

上述例子将已编码处理的URL进行解码还原,同样的方法,可使用quote()对数据进行编码处理。quote()和unquote()的作用是解决请求参数中含有中文内容的问题。