Python3中使用urllib的方法详解(header,代理,超时,认证,异常处理)

  • Post category:Python

在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请求问题。