Python是一种流行的编程语言,为开发者提供了许多功能强大的库和框架。其中,Python Requests库是一款非常流行的HTTP库,用于向网站发送请求并接收响应。它可以轻松地帮助开发人员编写爬虫、发送电子邮件、处理API请求以及处理REST API等任务。在本篇文章中,我们将介绍如何使用Python Requests库进行HTTP请求和响应处理,并探讨如何使用它来构建更高级的网络应用程序。
一、快速开始
为了开始操作,我们需要先安装Python Requests库。可以通过以下命令在命令行中安装Python Requests库:
pip install requests
安装完成后,我们就可以使用Python Requests库发送HTTP请求。下面是一个简单的GET请求示例:
import requests
url = 'https://www.google.com'
response = requests.get(url)
print(response.text)
在这个例子中,我们使用requests模块发送请求直接获取谷歌首页的HTML内容,并将内容打印出来。返回响应之后,在response对象中,我们可以访问网站提供的许多属性,包括response.status_code、response.encoding和response.headers等。
二、发送请求
1. 带参数的GET请求
GET请求通常用于从服务器检索数据。使用Python Requests库,我们可以使用以下代码发送带参数的GET请求:
import requests
url = 'https://httpbin.org/get'
payload = {'key1': 'value1', 'key2': 'value2'}
response = requests.get(url, params=payload)
print(response.url)
print(response.text)
在这个示例中,我们构建了一个简单的字典payload,包含两个键和值。请求被发送到https://httpbin.org/get URL,并将payload作为params参数传递。params参数将负责将参数附加到URL的末尾。
2. 带数据的POST请求
POST请求用于向服务器发送数据,这些数据可能包括通过表格提交的数据或通过API传递的数据。使用Python Requests库,我们可以使用以下代码发送带数据的POST请求:
import requests
url = 'https://httpbin.org/post'
data = {'key1': 'value1', 'key2': 'value2'}
response = requests.post(url, data=data)
print(response.text)
在这个示例中,我们将payload作为一个简单的字典传递给请求,并通过post()方法将其发送到https://httpbin.org/post URL。Python Requests库负责将数据编码为正确的格式,并将其发送给服务器。
3. 带Headers的请求
在发送HTTP请求时,我们可以通过包含Headers来向请求添加额外的信息,例如浏览器类型、授权凭证或Cookie等。发送请求时,可以使用Python Requests库中的headers参数将Headers添加到请求中,以下是一个示例:
import requests
url = 'https://httpbin.org/headers'
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'}
response = requests.get(url, headers=headers)
print(response.text)
在这个示例中,我们使用User-Agent头模拟了Chrome浏览器的请求。Headers参数需要一个包含键值对的字典,其中键是Header名称,值是Header值。
4. 超时请求
Python Requests库允许我们发送具有超时限制的请求。如果请求在指定的时间之内没有得到响应,将引发异常。这有助于避免由于长时间等待响应而导致的死锁或连接超时。以下是一个基本的超时请求示例:
import requests
url = 'https://httpbin.org/delay/6'
timeout = 3
try:
response = requests.get(url, timeout=timeout)
response.raise_for_status()
except:
print("TimeOut Occured")
在这个示例中,我们设置了请求的超时时间为3秒。如果请求在这个时间内没有收到响应,那么就会引发超时异常。
三、处理响应
1. 响应属性
发送请求之后,我们可以通过response对象来访问响应内容。Python Requests库提供了许多有用的属性,例如response.status_code、response.encoding、response.headers和response.text等。以下是一些示例:
import requests
url = 'https://httpbin.org/get'
response = requests.get(url)
print(response.status_code) # 200
print(response.encoding) # utf-8
print(response.headers) # 请求的headers
print(response.text) # 请求的内容
2. 解析JSON响应
许多API返回JSON格式的响应。在Python中,我们可以使用内置的JSON库来解析JSON数据。Python Requests库提供了一个方便的方法来访问JSON响应。
import requests
url = 'https://jsonplaceholder.typicode.com/posts/1'
response = requests.get(url)
data = response.json()
print(data)
3. 访问二进制数据
如果响应包含二进制数据,例如图像或PDF文件,我们可以使用Python Requests库中的content属性来访问这些数据。以下是一个示例:
import requests
url = 'https://s3.amazonaws.com/cdn-origin-etr.akc.org/wp-content/uploads/2017/11/20143958/Beagle-On-White-01.jpg'
response = requests.get(url)
with open('beagle.jpg', 'wb') as f:
f.write(response.content)
四、进阶用法
1. Session会话对象
如果我们需要保持HTTP状态(例如Cookies等)并在多个请求之间共享数据,则可以使用Python Requests库中的Session对象。Session对象提供了一种方式来持久化客户端之间的连接。
import requests
url = 'https://httpbin.org/cookies/set'
payload = {'key1': 'value1', 'key2': 'value2'}
session = requests.Session()
session.get(url, params=payload)
response = session.get('https://httpbin.org/cookies')
print(response.text)
2. 身份验证
Python Requests库提供了多种身份验证方法,例如基本身份验证和摘要身份验证。以下是一个基本身份验证的示例。
import requests
url = 'https://httpbin.org/basic-auth/user/pass'
response = requests.get(url, auth=('user', 'pass'))
print(response.text)
3. SSL证书验证
Python Requests库使用SSL库来验证HTTPS连接的证书。默认情况下,如果证书无效或不受信任,则会引发异常。要禁用此行为,请使用verify参数。
import requests
url = 'https://httpbin.org/get'
response = requests.get(url, verify=False)
print(response.text)
4. 代理
要使用代理服务器发送HTTP请求,可以使用Python Requests库中的proxies参数。以下是一个代理服务器的示例:
import requests
url = 'https://httpbin.org/get'
proxies = {
'https': 'http://10.10.1.10:3128',
'http': 'http://10.10.1.10:3128',
}
response = requests.get(url, proxies=proxies)
print(response.text)
总结
在本文中,我们介绍了Python Requests库的基本使用方式,并探讨了一些高级用法。Python Requests是一个强大的HTTP库,可以用于各种操作,例如发送电子邮件、构建REST API和处理数据等。使用Python Requests库,我们可以轻松地将网络请求与Python代码集成起来,同时具备许多方便的功能。