您的位置:

Python Requests教程:从入门到进阶

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代码集成起来,同时具备许多方便的功能。