使用python urllib进行网络请求
在Python中,要进行网络请求可以使用urllib库来实现。urllib是Python的一个标准库,提供了一系列用于处理URL的模块,包括请求、响应、cookie、异常处理等功能。本文将介绍如何使用urllib进行网络请求。
1. 发送GET请求
使用urllib发送GET请求很简单,只需要调用urllib.request模块里的urlopen()函数即可。下面是一个简单的示例:
import urllib.request
response = urllib.request.urlopen('http://www.example.com')
html = response.read().decode('utf-8')
print(html)
上述代码中,我们首先导入了urllib.request模块,然后使用urlopen()函数发送了一个GET请求,并将响应存储在response变量中。最后使用read()方法读取响应的内容,并通过decode()方法将其解码为utf-8编码的字符串,然后打印出来。
2. 发送POST请求
如果需要发送POST请求,可以使用urllib.parse模块来构造请求数据,并通过urllib.request模块中的urlopen()函数发送请求。下面是一个发送POST请求的示例:
import urllib.request
import urllib.parse
data = urllib.parse.urlencode({'key': 'value'})
data = data.encode('utf-8')
request = urllib.request.Request(url, data=data, method='POST')
response = urllib.request.urlopen(request)
html = response.read().decode('utf-8')
print(html)
上述代码中,首先使用urllib.parse模块中的urlencode()函数将请求数据编码为URL格式,然后使用encode()方法将其转换为字节流,接着使用urllib.request模块中的Request类创建一个请求对象,并指定请求的URL、请求数据和请求方法。最后发送请求并读取响应。
3. 设置请求头
有时候,我们可能需要设置一些请求头信息,比如User-Agent、Referer等。可以通过在Request对象中添加请求头信息来实现。下面是一个设置请求头的示例:
import urllib.request
url = 'http://www.example.com'
headers ={
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3',
'Referer': 'http://www.example.com'
}
request = urllib.request.Request(url, headers=headers)
response = urllib.request.urlopen(request)
html = response.read().decode('utf-8')
print(html)
上述代码中,我们在headers字典中定义了User-Agent和Referer两个请求头信息,然后将其作为参数传递给Request对象。发送请求后,服务器会根据请求头信息来处理请求。
4. 处理异常
在进行网络请求时,可能会遇到一些异常情况,比如网络连接超时、服务器没有响应等。urllib库提供了一些异常类来处理这些异常情况。下面是一个异常处理的示例:
import urllib.request
import urllib.error
try:
response = urllib.request.urlopen('http://www.example.com')
html = response.read().decode('utf-8')
print(html)
except urllib.error.URLError as e:
print(e.reason)
上述代码中,我们使用try-except语句捕获了URLError异常,并打印出了异常的原因。
5. 设置超时时间
有时候,在进行网络请求时,可能需要设置超时时间,以避免长时间等待没有响应的请求。urllib提供了timeout参数来设置超时时间。下面是一个设置超时时间的示例:
import urllib.request
try:
response = urllib.request.urlopen('http://www.example.com', timeout=3)
html = response.read().decode('utf-8')
print(html)
except urllib.error.URLError as e:
print(e.reason)
上述代码中,我们在urlopen()函数中添加了timeout参数,并设置为3秒钟。如果在3秒钟内没有得到响应,则会抛出URLError异常。
总结
使用urllib库可以方便地发送GET和POST请求,设置请求头信息,处理异常情况,设置超时时间等。在实际开发中,经常会用到网络请求功能,掌握urllib的使用是非常重要的。