以下是针对“Python urllib和urllib3知识点总结”的完整攻略。
1. urllib和urllib3是什么?
1.1 urllib
urllib
是Python中一个内置的HTTP客户端库,提供了一系列的URL处理方法,包括:打开URL、读取URL返回的数据、提交数据到指定的URL等。在Python3.x中,urllib
库已经被拆分成四个子模块:
- urllib.request
:打开和读取URL的主要模块。
- urllib.parse
: 解析URL的模块,提供了一系列的URL解析方法。
- urllib.error
: 定义了urllib.request
的异常集合。
- urllib.robotparser
:解析robots.txt
文件的模块。
1.2 urllib3
相比于urllib
,urllib3
是一个第三方库,可以更好的处理HTTP请求。urllib3
使用的是连接池的方式,一个连接在使用之后就会回收到连接池中,而不会直接关闭,以供后续的请求继续使用。urllib3
可以很好的应对并发请求,减少因服务器响应慢导致的等待时间,提高应用性能。
2. urllib使用示例
2.1 GET请求
下面是一个使用urllib
进行GET请求的示例:
import urllib.request
url = 'http://www.example.com'
with urllib.request.urlopen(url) as f:
response = f.read()
print(response)
urllib.request.urlopen(url)
用于打开一个URL并返回一个类似文件的对象。我们可以用read()
方法读取其中的内容,这里演示的是请求一个URL并打印得到的html页面数据。
2.2 POST请求
下面是一个使用urllib
进行POST请求的示例:
import urllib.parse
import urllib.request
url = 'http://www.example.com/login'
values = {'username': 'example_user', 'password': 'example_password'}
data = urllib.parse.urlencode(values).encode('utf-8')
req = urllib.request.Request(url, data)
with urllib.request.urlopen(req) as f:
response = f.read()
print(response)
这里除了URL以外,我们额外定义了一个字典类型的参数values
, 并且使用urllib.parse.urlencode
将它转换为url编码,最终将编码后的数据通过POST
方法发送给服务器。
此外,我们还可以添加HTTP头部信息,可以通过添加 headers
参数来实现;或是使用add_header()
方法添加其它的自定义头部。
import urllib.request
url = 'http://www.example.com'
headers = {'Content-Type': 'application/json'}
req = urllib.request.Request(url, headers=headers)
with urllib.request.urlopen(req) as f:
response = f.read()
print(response)
3. urllib3使用示例
3.1 创建连接池
使用urllib3
要先构造一个PoolManager
实例,创建好连接池以供后面的请求使用。其中,PoolManager
实例可以自动选择连接并发起HTTP请求,因此在使用时可以直接传递需要的URL和数据。
import urllib3
# 创建连接池
http = urllib3.PoolManager()
# 向URL发送GET请求
response = http.request('GET', 'http://www.example.com')
print(response.data)
3.2 发送POST请求
发送POST请求时可以使用urllib3.connectionpool.HTTPConnectionPool
.request()或是
urllib3.PoolManager().request()` 方法,下面是一个使用后者方法的POST请求的示例:
import json
import urllib3
http = urllib3.PoolManager()
data = {'username': 'example_user', 'password': 'example_password'}
encoded_data = json.dumps(data).encode('utf-8')
headers = {'Content-Type': 'application/json'}
response = http.request('POST', 'http://www.example.com/login', body=encoded_data, headers=headers)
print(response.data)
与urllib
类似,这里除了URL以外,我们使用一个字典类型的参数data
来指定POST请求参数,并使用json.dumps
将其转换为JSON格式。然后我们又定义了一个headers
请求头部信息。
总结
本文中我们详细讲解了Python中urllib
和urllib3
的使用,并通过示例代码演示了GET和POST请求的使用,希望对大家有所帮助。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:python urllib和urllib3知识点总结 - Python技术站