urllib3观看笔记

urllib3是如何发送请求的
他和urllib有何不同
urllib3

发送get请求

是直接创建个PoolManager()类的实例a,然后用a实例去request请求
b = a.request('GET',url,fields={})
还可以使用fields关键字参数指定GET请求字段

返回值用.data输出

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

可以忽略警告信息的函数

disable_warnings()

这里我突然想到为什么post请求不能再浏览器中输入,我把post请求的字典参数和网址放在一起请求返回个405.
那么这里的问题难道是没有编码,这个请求方式并不是post请求,而是get请求。

http请求头

PoolManager对象的request方法的headers关键字参数可以指定字典形式的HTTP请求头
之前的fields关键字参数可以指定post请求形式的字典

http响应头

response.info().keys()返回所有响应的键键值对,对这个还是键值对,主要是属性不相同。
那么值就是
for i in response.info().keys():
response.info().keys()[i] # 这是错的
response.info()[i] # 这是对的

上传文件

发送其他值时,是以字节为单位的,而上传文件时,可能是以KB或MB为单位的,发送的文件尺寸比较大,因此上传文件内容会用multipart/form-data格式进行编码,然后再上传。

这里只需要使用fields关键字参数指定一个描述上传文件的HTTP请求头字段
如:
fields={'file':(filename,fileData)}
response = http.request('POST',url,fields={'file':(filename,fileData)})

用flask编写上传文件的路径及网址之类可以参考本章的用python实现上传文件的方式,但请求地址估计要抓包

超时操作

可以用timeout参数,可以写再构造PoolManager类中,也可以写在请求request中。
timeout=Timeout(connect=2.0,read=2.0)
还可以总超时时间
timeoout = 5.0
这里的超时包括:连接超时和读超时

posted @ 2021-10-02 15:48  索匣  阅读(20)  评论(0编辑  收藏  举报