在Python中,GET请求是最常见的一个HTTP请求方法。而在实现该方法时,使用`requests`模块的`get()`函数是非常流行的选择。在本篇文章中,我们将全面介绍`get()`函数及其各种不同用法,帮助您更好地了解和使用它。
一、发送简单的GET请求
首先,我们来看一个最简单的例子。向某个网站发送一个GET请求,获取其返回的HTML页面,然后打印出来。对于这个任务,无需传递任何参数即可实现。
import requests
response = requests.get('http://httpbin.org/html')
print(response.text)
这里我们向http://httpbin.org/html发送GET请求,该网站会返回一个简单的HTML页面作为响应。使用`text`属性可以获取到响应的HTML内容。 理解`get()`函数的一个重要方面是了解其可选参数的作用。例如,可以使用`headers`参数向服务器发送附加的头信息,如`User-Agent`。这对于模拟不同的客户端或操作系统非常有用。
import requests
url = 'http://httpbin.org/user-agent'
headers = {'User-Agent': 'Mozilla/5.0'}
response = requests.get(url, headers=headers)
print(response.json())
这里我们设置了一个伪造的`User-Agent`头,然后向http://httpbin.org/user-agent发送GET请求。该网站会返回一个JSON响应,其中包含了客户端的详细信息。使用`json()`方法可以将响应内容转换为JSON格式的数据。
二、传递URL参数
发送GET请求时,我们通常需要将查询字符串参数添加到URL后面。这些参数以`?`符号开头,然后是类似`key=value`的形式来传递。可以使用`params`参数向`get()`函数传递这些参数。
import requests
url = 'http://httpbin.org/get'
params = {'key1': 'value1', 'key2': 'value2'}
response = requests.get(url, params=params)
print(response.url)
这里我们向http://httpbin.org/get发送GET请求,并传递了两个URL参数,即`key1`和`key2`。使用`url`属性可以获取到完整的URL,包含了传递的参数。
三、发送请求时超时处理
如果请求一个长时间不响应的服务器,我们可能需要手动处理超时情况。`requests`模块的`get()`函数提供了一个`timeout`参数,以便在连接请求超过指定秒数时引发一个异常。
import requests
url = 'http://httpbin.org/delay/5'
try:
response = requests.get(url, timeout=2)
print(response.text)
except requests.exceptions.Timeout:
print('Timeout occurred')
这里我们向http://httpbin.org/delay/5发送GET请求,但设置了一个超时时间为2秒。由于响应需要5秒才能完成,因此会引发一个`Timeout`异常。在这种情况下,我们捕获该异常并打印出错误信息。
四、处理请求的响应
`get()`函数返回一个`Response`对象,该对象包含响应的所有信息。在处理响应时,我们可以使用各种`Response`对象的属性和方法。以下是一些常见的例子:
import requests
url = 'http://httpbin.org/get'
response = requests.get(url)
# 获取HTTP状态码
print(response.status_code)
# 获取响应头部信息
print(response.headers)
# 获取响应内容(二进制数据)
print(response.content)
# 将响应内容解析为文本(Unicode)格式
print(response.text)
# 将响应内容解析为JSON格式
print(response.json())
# 获取响应时间(以秒为单位)
print(response.elapsed.total_seconds())
五、使用代理服务器
有时,访问某些网站可能因为您所在的地址而被屏蔽了。在这种情况下,我们可以使用代理服务器来发送请求,以改变我们的位置。 可以通过将`proxies`参数传递给`get()`函数来使用代理服务器。将`proxies`设为一个字典,键为`http`和/或`https`,值为代理服务器的URL。
import requests
url = 'http://httpbin.org/ip'
proxies = {'http': 'http://localhost:8080', 'https': 'https://localhost:8080'}
response = requests.get(url, proxies=proxies)
print(response.json())
这里我们向http://httpbin.org/ip发送GET请求,并传递了一个代理服务器URL。使用`json()`方法解析响应内容,可以看到我们使用代理服务器的IP地址。
六、基本身份验证
有时,我们需要向某些需要授权才能访问的站点发送请求。在这种情况下,我们可以使用基本身份验证。这种身份验证方式会在HTTP头部中发送用户名和密码的base64表示形式。 可以通过将`auth`参数传递给`get()`函数来实现基本身份验证。将`auth`设为一个元组,第一个元素是用户名,第二个元素是密码。
import requests
url = 'http://httpbin.org/basic-auth/user/passwd'
auth = ('user', 'passwd')
response = requests.get(url, auth=auth)
print(response.text)
这里我们向http://httpbin.org/basic-auth/user/passwd发送GET请求,并使用基本身份验证。该网站需要用户名`user`和密码`passwd`才能访问。使用`text`属性获取到响应内容。
七、自定义请求头部
有时,我们需要向服务器发送某些自定义的HTTP头部,例如`Referer`、`Accept-Language`等。可以通过将`headers`参数传递给`get()`函数来实现这一点。
import requests
url = 'http://httpbin.org/headers'
headers = {'Referer': 'http://www.example.com'}
response = requests.get(url, headers=headers)
print(response.json())
这里我们向http://httpbin.org/headers发送GET请求,并传递了一个自定义的`Referer`头部。该网站会返回一个JSON响应,其中包含了我们发送的HTTP头部信息。
八、使用会话对象
如果我们需要处理多个相关的请求,例如在同一会话中使用基本身份验证或使用代理服务器,可以使用`requests`模块的会话对象。会话对象可以处理多个相关请求,并自动将cookie等信息保存在会话中。 可以使用`Session()`函数创建一个会话对象。
import requests
session = requests.Session()
url = 'http://httpbin.org/cookies/set/sessioncookie/123456789'
session.get(url)
response = session.get('http://httpbin.org/cookies')
print(response.json())
这里我们创建一个会话对象,然后发送两个相关的请求。在第一个请求中,我们设置一个名为`sessioncookie`的cookie。在第二个请求中,我们检索该cookie,并在响应中返回它的值。
九、结语
在本文中,我们介绍了`get()`函数的许多不同用法,包括基本使用、URL参数传递、超时处理、处理响应、使用代理服务器、基本身份验证、自定义请求头部以及会话对象。这些技术可以帮助您更好地了解和使用`get()`函数,以便更轻松地进行HTTP请求和响应处理。