在Python3中,我们可以使用urllib模块来发送HTTP请求,包括GET、POST等。本文将详细讲解如何使用urllib模块发送HTTP请求,并绍一些常用的参数,例如header、代理、超时、认证和异常处理等。
发送GET请求
发送GET请求是最常见HTTP请求之一,我们可以使用urllib模块的urlopen()
函数来发送GET请求。下面是一个示例,说明如何使用urllib发送GET请求:
from urllib.request import urlopen
url = 'https://www.example.com'
response = urlopen(url)
print(response.read())
在上面的代码中,我们使用urlopen()
函数发送了一个GET请求,并获取了网站的HTML代码。当我们运行这个代码时,将输出网站的HTML代码。
发送POST请求
发送POST请求是另一种常见的HTTP请求,我们可以使用urllib模块的urlopen()
函数来发送POST请求。下面是一个示例,说明如何使用urllib发送POST请求:
from urllib.request import urlopen, Request
from urllib.parse import urlencode
url = 'https://www.example.com'
data = {'username': 'admin', 'password': '123456'}
data = urlencode(data).encode('utf-8')
req = Request(url, data)
response = urlopen(req)
print(response.read())
在上面的代码中,我们使用urlencode()
函数将POST请求的数据编码为URL格式,并使用encode()
函数将数据编码为UTF-8格式。然后,我们使用Request()
创建一个POST请求,并使用urlopen()
函数发送请求。当我们运行这个代码时,将输出网站的HTML代码。
添加header
在发送HTTP请求时,我们经常需要添加一些header信息,例如User-Agent、Referer等。我们可以使用urllib模块的Request()
函数来添加header信息。下面是一个示,说明如何使用urllib添加header信息:
from urllib.request import urlopen, Request
url = 'https://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'}
req = Request(url, headers=headers)
response = urlopen(req)
print(response.read())
在上面的代码中,我们使用Request()
函数创建一个请求,并在请求中添加了一个User-Agent字段。当我们运行这个代码时,将输出网站的HTML代码。
使用代理
在发送请求时,我们经常需要使用代理来隐藏真实IP地址。我们可以使用urllib模块的ProxyHandler()
函数来设置代理。下面是一个示例,说明如何使用urllib设置代理:
from urllib.request import urlopen, Request, ProxyHandler
from urllib.parse import urlencode
url =https://www.example.com'
data = {'username': 'admin', 'password': '123456'}
data = urlencode(data).encode('utf-8')
req = Request(url, data)
proxy_handler = ProxyHandler({'http': 'http://127.0.0.1:8080', 'https': 'https://127.0.0.1:8080'})
opener = build_opener(proxy_handler)
response = opener.open(req)
print(response.read())
在上面的代码中,我们使用ProxyHandler()
函数创建一个代理处理器,并使用build_opener()
函数创建一个自定义的opener。然后,我们使用opener发送请求,并网站的HTML代码。当我们运行这个代码时,将使用代理发送请求,并输出网站的HTML代码。
设置超时
在发送HTTP请求时,我们经常需要设置超时时间,以避免请求长时间无响应。我们可以使用urllib模块的urlopen()
函数的timeout
参数来设置超时时间。下面是一个示例,说明如何使用urllib设置超时时间:
from urllib.request import urlopen
url = 'https://www.example.com'
response = urlopen(url, timeout=10)
print(response.read())
在上面的代码中,我们使用urlopen()
函数发送一个GET请求,并设置了超时时间为10秒。当请求超过10秒无响应时,将抛出socket.timeout
异常。
认证
在发送HTTP请求时,我们经常需要进行证,例如使用HTTP Basic认证。我们可以使用urllib模块的HTTPBasicAuthHandler()
函数来进行认证。下面是一个示例,说明如何使用urllib进行HTTP Basic认证:
from urllib.request import urlopen, Request, HTTPBasicAuthHandler, build_opener
url =https://www.example.com'
username = 'admin'
password = '123456'
auth_handler = HTTPBasicAuthHandler()
auth_handler.add_password(realm=None, uri=url, user=username, passwd=password)
opener = build_opener(auth_handler)
response = opener.open(url)
print(response.read())
在上面的代码中,我们使用HTTPBasicAuthHandler()
函数创建一个HTTP Basic认证处理器,并使用add_password()
函数添加认证信息。然后,我们使用build_opener()
函数创建一个自定义的opener,并使用opener发送请求。当我们运行这个代码时,将使用HTTP Basic认证发送请求,并输出网站的HTML代码。
综上所述,以上就是Python3中使用urllib的方法详解,包括发送GET请求、发送POST请求、添加header、使用代理、设置超时、认证和异常处理等。这些方法可以帮助我们更好地发送HTTP请求,并处理常见的HTTP请求问题。