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
这里的超时包括:连接超时和读超时