Python 2.x 中如何使用urllib2模块发送HTTP请求

Python 2.x 中如何使用 urllib2 模块发送 HTTP 请求

什么是 urllib2 模块?

Python 2.x 提供了名为 urllib2 的模块,使我们能够在 Python 程序中发送 HTTP 请求。urllib2 模块是 Python 标准库的一部分,因此您无需使用 pip 安装就可以使用它。

如何发送 HTTP 请求?

要发送 HTTP 请求,我们需要创建一个 urllib2.Request 对象来表示该请求。此对象跟踪许多有用的属性,如 URL、HTTP 方法、HTTP 标头等。以下代码段将创建一个简单的请求对象:

import urllib2

request = urllib2.Request('http://www.example.com/')

重要部分:上面的代码使用 Request 类的构造函数来创建一个请求对象。该函数的一项参数是 URL,该 URL 指定要请求的资源。

但是,即使我们创建了一个请求对象,我们也不能真正发送 HTTP 请求。相反,我们需要使用 urllib2.urlopen() 函数打开 URL,因此以下是完整的示例:

import urllib2

request = urllib2.Request('http://www.example.com/')

response = urllib2.urlopen(request)

print(response.read())

重要部分:上面的代码使用 urllib2.urlopen() 函数打开请求对象,并获取响应对象。response.read() 函数从响应对象中读取内容并将其打印到屏幕上。

如何设置 HTTP 标头?

HTTP 标头是一些元数据,可以向服务器传送多个信息,例如身份验证凭据、浏览器类型、内容类型等。我们可以使用 Request 类的 add_header() 方法来设置 HTTP 标头。

以下是一个示例,其中我们将设置 User-Agent 标头以模拟 Firefox 浏览器的请求:

import urllib2

url = 'http://example.com/'

headers = {

'User-Agent': 'Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.110 Safari/537.36',

'Referer': 'http://www.google.com',

}

request = urllib2.Request(url, headers=headers)

response = urllib2.urlopen(request)

print(response.read())

重要部分:上面的代码创建一个包含 User-Agent 和 Referer 标头的请求对象,并使用 urllib2.urlopen() 函数将其发送到示例网站上。输出响应的内容(HTML)。

如何在请求中传递数据?

有时,我们需要向服务器发送数据。例如,我们可以使用 HTTP POST 方法将表单数据发送到 Web 服务器。在这种情况下,我们可以使用 urllib2.urlopen() 函数的 data 参数将数据传递给服务器。

以下是一个示例,其中我们将向 Web 服务器发送一些样本数据:

import urllib

import urllib2

url = 'http://www.example.com'

values = {

'name': 'John Smith',

'location': 'California',

'language': 'Python'

}

data = urllib.urlencode(values)

req = urllib2.Request(url, data)

response = urllib2.urlopen(req)

result = response.read()

print(result)

重要部分:上面的代码使用 urllib.urlencode() 函数将 values 参数编码为字符串,并将其与请求一起发送到示例网站。服务器将数据存储在数据库中,并在收到请求后返回一些数据。

如何处理 HTTPS 请求?

默认情况下,urllib2 在发送 HTTPS 请求时不会验证 SSL 证书。这可以通过创建 SSL 上下文来更改。我们可以使用 urllib2.build_opener() 函数创建一个自定义的 HTTPS 处理程序。

在以下示例中,我们将创建一个 HTTPS 处理程序,并使用它来发送一个 HTTPS 请求:

import urllib2

import ssl

url = 'https://www.example.com'

context = ssl.create_default_context()

handler = urllib2.HTTPSHandler(context=context)

opener = urllib2.build_opener(handler)

response = opener.open(url)

print(response.read())

重要部分:上面的代码创建一个 SSL 上下文,并使用它创建一个 HTTPS 处理程序。在使用 urllib2.build_opener() 函数创建自定义 opener 后,我们可以使用其 open() 方法发送 HTTPS 请求。

总结

在 Python 2.x 中,使用 urllib2 模块发送 HTTP 请求是一种简单而有效的方法。通过创建一个 urllib2.Request 对象,指定 URL 并提供可选的 HTTP 标头和数据,我们可以轻松地与网络资源交互。对于 HTTPS 请求,我们必须创建一个自定义的处理程序,并使用它执行操作。

后端开发标签