urllib3简介
编辑时间:2021-07-02
目录
- 创建一个简单的请求
- 响应内容
- 请求数据
- 自定义Headers
- 请求参数
- 表单数据
- JSON
- 文件和二进制数据
创建一个简单的请求
1、导入urllib3
,实例化PoolManager
:
>>> import urllib3
>>> http = urllib3.PoolManager()
2、使用request()
方法请求URL资源,如果请求成功,会返回一个HTTPResponse
对象:
>>> r = http.request('GET', 'http://httpbin.org/robots.txt')
>>> r.data
b'User-agent: *\nDisallow: /deny\n'
响应内容
HTTPResponse
对象属性有:status
,data
,headers
>>> r = http.request('GET', 'http://httpbin.org/ip')
>>> r.status
200
>>> r.data
b'{\n "origin": "218.108.16.44"\n}\n'
>>> r.headers
HTTPHeaderDict({'Date': 'Fri, 02 Jul 2021 09:09:42 GMT', 'Content-Type': 'application/json', 'Content-Length': '32', 'Connection': 'keep-alive', 'Server': 'gunicorn/19.9.0', 'Access-Control-Allow-Origin': '*', 'Access-Control-Allow-Credentials': 'true'})
请求数据
自定义Headers
>>> r = http.request(
... 'GET',
... 'http://httpbin.org/headers',
... headers={
... 'X-Something': 'this is header content'
... }
... )
>>> json.loads(r.data.decode('utf-8'))['headers']
{'Accept-Encoding': 'identity',
'Host': 'httpbin.org',
'User-Agent': 'python-urllib3/1.26.5',
'X-Amzn-Trace-Id': 'Root=1-60deda71-54e886506a2520751a6d2866',
'X-Something': 'this is header content'}
请求参数
对于GET,HEAD,DELTE
请求,可以将参数直接放在fileds
字典中传给requests()
>>> r = http.request(
... 'GET',
... 'http://httpbin.org/get',
... fields={'username': '张三'}
... )
>>> json.loads(r.data.decode('utf-8'))['args']
{'username': '张三'}
对于POST,PUT
请求,则需要手动将请求参数在URL中编码序列化
>>> from urllib.parse import urlencode
>>> encoded_args = urlencode({'arg': 'value'})
>>> url = 'http://httpbin.org/post?' + encoded_args
>>> r = http.request('POST', url)
>>> json.loads(r.data.decode('utf-8'))['args']
{'arg': 'value'}
表单数据
对于PUT
和POST
请求,可以将表单数据直接放进fileds
字典中传给requests()
>>> r = http.request(
... 'POST',
... 'http://httpbin.org/post',
... fields={'field': 'value'}
... )
>>> json.loads(r.data.decode('utf-8'))['form']
{'field': 'value'}
JSON
>>> import json
>>> data = {'attribute': 'value'}
>>> encoded_data = json.dumps(data).encode('utf-8')
>>> r = http.request(
... 'POST',
... 'http://httpbin.org/post',
... body=encoded_data,
... headers={'Content-Type': 'application/json'}
... )
>>> json.loads(r.data.decode('utf-8'))['json']
{'attribute': 'value'}
文件和二进制数据
内容篇幅较多,请参考官方文档
参考资料: