requests
模块通过简化发送请求和处理响应的过程,使得与网页和 API 的交互变得容易。使用 requests,你可以快速轻松地从网络中检索数据,并在 Python 项目中使用这些数据。在本文中,我们将探索 requests 模块及其功能,并演示如何在 Python 代码中使用它。
关于 requests 模块的一些说明
Python 中的 Requests 模块是一个 HTTP 库,它允许你使用 Python 发送 HTTP/1.1 请求。但是,如果你在尝试在 Python 中使用 requests
模块时遇到 没有名为 requests 的模块
错误,则表示该模块未安装或在你的环境中不可访问。
要安装 requests 模块,你只需在终端中运行以下命令
pip install requests
安装 Requests 库后,你可以使用它通过 Python 向 Web 服务器发送请求。以下是一个简单的代码示例,演示如何使用 Requests 模块从网站请求 data
import requests
response = requests.get('https://www.example.com')
print(response.text)
在此示例中,我们 import
Requests 模块并使用 requests.get()
方法向参数中指定的网站发送 GET 请求。response.text
属性包含网站返回的 data
,我们将其 print
到控制台。
以下是如何发送带有某些数据的 POST 请求的另一个示例
import requests
data = {'key': 'value'}
response = requests.post('https://www.example.com', data=data)
print(response.text)
在此示例中,我们使用 requests.post()
方法向参数中指定的网站发送 POST 请求。我们还将一些 data
作为字典传递,这些 data
将作为表单 data
随请求一起发送。response.text
属性包含网站返回的 data
,我们将其 print
到控制台。
使用 JSON 的 Requests
JSON 是一种用于系统之间数据交换的流行数据格式。在此上下文中,我们将学习如何使用 Python requests 发送和接收 JSON 数据。
要使用 requests
发送带有 JSON 的 POST
请求,请使用 post
方法并使用 json
参数传递 JSON 数据。
import requests
data = {
'name': 'John Doe',
'email': '[email protected]',
'message': 'Hello world!'
}
response = requests.post('https://example.com/api', json=data)
print(response.status_code)
print(response.json())
要发送带有 JSON 的 GET
请求,请使用 get
方法并使用 params
参数传递 JSON 数据。
import requests
params = {
'category': 'books',
'page': 1
}
response = requests.get('https://example.com/api', params=params)
print(response.status_code)
print(response.json())
要将 JSON 数据作为请求正文发送,请使用 data
参数,而不是 params
参数。
import requests
import json
data = {
'name': 'John Doe',
'email': '[email protected]',
'message': 'Hello world!'
}
response = requests.post('https://example.com/api', data=json.dumps(data))
print(response.status_code)
print(response.json())
总之,requests
使得发送和接收 JSON 数据变得容易。根据你发送的是 POST
请求还是 GET
请求,使用 json
或 data
参数。请记住,服务器必须能够处理你发送的 JSON 数据。
如何设置 requests 超时
如果你正在使用 Python requests
进行 HTTP 请求,则必须设置超时值以避免请求持续太长时间。使用 requests 库设置超时值很容易。以下两个代码示例使用 get
方法设置超时值。
import requests
response = requests.get("https://www.example.com", timeout=5)
在上面的示例中,我们设置了 5 秒的超时值。因此,如果服务器在 5 秒内没有响应,则请求将引发 requests.exceptions.Timeout
异常。
import requests
try:
response = requests.get("https://www.example.com", timeout=5)
response.raise_for_status()
except requests.exceptions.HTTPError as errh:
print("HTTP Error:", errh)
except requests.exceptions.ConnectionError as errc:
print("Error Connecting:", errc)
except requests.exceptions.Timeout as errt:
print("Timeout Error:", errt)
except requests.exceptions.RequestException as err:
print("Something went wrong:", err)
在上面的示例中,我们使用 try-except
块来处理异常。如果请求花费的时间超过 5 秒,它将引发 requests.exceptions.Timeout
异常。
通过设置超时值,我们可以防止程序无限期地等待,并且可以优雅地处理错误。
Requests 属性
Requests
提供了几个属性,可用于自定义和访问请求的不同部分,例如请求正文、标头、响应和 cookie。
请求正文
要在请求正文中发送数据,可以使用 data
参数,其中包含键值对词典。这是一个示例
import requests
payload = {'key1': 'value1', 'key2': 'value2'}
response = requests.post('https://example.com', data=payload)
标头
可以使用 headers
参数将标头添加到请求中。在发送授权令牌或自定义标头时,这可能很有用。这是一个示例
import requests
headers = {'Authorization': 'Bearer my_token', 'Custom-Header': 'value'}
response = requests.get('https://example.com', headers=headers)
响应
response
对象包含服务器对请求的 response
。它包括属性,例如 response
状态代码、内容和标头。这是一个示例
import requests
response = requests.get('https://example.com')
print(response.status_code)
print(response.content)
print(response.headers)
Cookie
可以使用 cookies
属性访问和设置 cookie。这对于维护 session
或设置持久性数据很有用。这是一个示例
import requests
login_data = {'username': 'my_username', 'password': 'my_password'}
response = requests.post('https://example.com/login', data=login_data)
# Get the session cookie
session_cookie = response.cookies['session']
# Use the session cookie for subsequent requests
response2 = requests.get('https://example.com/protected', cookies={'session': session_cookie})
Requests 会话
Python Requests Session 是一款功能强大的工具,它允许你在单个 session
对象中维护 HTTP 请求的持久性。这意味着你可以轻松地为多个请求重复使用相同的连接,每个请求都基于前一个请求。
使用 Python 中内置的 requests
库,Sessions 功能维护 session
变量,包括 cookie。因此,它允许在客户端上进行临时存储。以下是一个示例代码片段,它说明了 Python Requests Session
import requests
session = requests.Session()
session.get('http://example.com')
在此代码中,我们创建一个新的 Session
对象,然后使用 get()
方法向给定的 URL 发出 GET 请求。默认情况下,此请求将包含使用此 session
对象发出的先前请求中设置的相关标头和 cookie。
Sessions 对于模拟有状态会话很有用,其中 HTTP cookie 用于记住服务器端状态。另一个示例是通过重复使用相同的 TCP 连接来加速对同一服务器的请求。这意味着服务器可以立即发送响应,而无需花费时间建立新的 TCP 连接。
以下是如何向 session
添加标头的示例,该标头将在所有后续请求中出现
import requests
session = requests.Session()
session.headers.update({'x-test': 'true'})
session.get('http://httpbin.org/headers')
在 Session
中,我们将标头 x-test
设置为 true
。然后,使用此 session
对象对 'http://httpbin.org/headers' 发出的任何后续请求都将包含此标头。
总之,Python Requests Session 提供了一种强大且灵活的方法,可以在多个 HTTP 请求中保持连接状态。对于任何使用 Python 中 HTTP 请求/响应数据的开发人员来说,它都是必备工具。
如何使用 Requests 下载文件
要使用 Python 中的 requests
模块下载文件,可以使用 get()
方法。此方法允许你向指定的 URL 发出请求并以类似文件的对象的形式检索内容。然后,你可以将内容写入本地计算机上的文件。
import requests
url = 'https://example.com/image.jpg'
response = requests.get(url)
with open('image.jpg', 'wb') as f:
f.write(response.content)
在此示例中,我们从 URL https://example.com/image.jpg
下载图像,并将其保存到名为 image.jpg
的文件中。response.content
属性包含图像的二进制内容,我们使用 write()
方法将其写入文件。
另一个示例是下载 CSV 文件并将其保存到磁盘
import requests
url = 'https://example.com/data.csv'
response = requests.get(url)
with open('data.csv', 'wb') as f:
f.write(response.content)
在此示例中,我们从 https://example.com/data.csv
下载 CSV 文件,并将其保存到 data.csv
。与之前一样,我们使用 write()
方法将内容写入文件。
在这两个示例中,我们都使用 requests
模块向指定的 URL 发出 GET 请求,并使用 response.content
属性检索二进制内容。然后,我们使用 open()
函数和 with
块将此二进制内容写入磁盘上的文件。
因此,这就是你可以在 Python 中使用 requests
下载文件的方法。
在 Requests 中使用代理
如果你想通过代理在 Python 中发送 HTTP 请求,你可以使用 requests
库。下面是如何操作
import requests
url = 'some_url'
proxies = {
'http': 'http://user:password@proxy:port',
'https': 'https://user:password@proxy:port'
}
response = requests.get(url, proxies=proxies)
在上面的代码示例中,你需要用你的实际凭据和代理地址和端口号替换 user
、password
、proxy
和 port
。
通过在你的 Python HTTP 请求中使用这些代理设置,你可以轻松绕过对你网络施加的任何限制,并且无需任何麻烦即可访问所需的资源。此外,你可以扩展你的服务以使其更加健壮和独立,同时保护你的网络免受外部用户侵害。
如何将 curl 转换为 Python 请求
将 curl
命令转换为 Python 请求对于使用 API 或 Web 请求的人来说是一项常见任务。
以下是使用 requests
模块将 curl
命令转换为 Python 请求的两个示例
curl
命令
curl https://jsonplaceholder.typicode.com/posts/1
Python 请求代码
import requests
response = requests.get('https://jsonplaceholder.typicode.com/posts/1')
print(response.json())
更复杂的 curl
命令
curl -X POST \
https://httpbin.org/post \
-H 'Content-Type: application/json' \
-d '{"name": "John Doe", "age": 25}'
Python request
代码
import requests
url = 'https://httpbin.org/post'
headers = {'Content-Type': 'application/json'}
data = '{"name": "John Doe", "age": 25}'
response = requests.post(url, headers=headers, data=data)
print(response.json())
总之,使用 requests
模块可以轻松地将 curl
转换为 Python 请求。通过理解 curl
命令的正确语法和结构,可以使用几行代码在 Python 中复制相同的请求。
Rest API
由于其简单的语法和庞大的库集合,Python 是一种用于构建 RESTful API 的流行语言。使用 Python,开发人员可以轻松地进行直接 API 调用并从流行的 Web 服务中提取 data
。
Python API 调用示例
以下是使用 Python 进行 API 调用的示例
import requests
url = "https://api.example.com/data"
response = requests.get(url)
print(response.json())
在上面的代码片段中,我们 import
Python“requests”模块,使用 API 端点的 URL 并使用“get”方法执行请求。最后,我们以 JSON 格式 print
检索到的 data
。
如何在 Python 中使用 RESTful API
Python 提供了一个名为 Flask
的库,该库广泛用于构建 REST API。要使用 Flask
创建 RESTful API,你需要安装 Flask
并使用路由功能来定义 API 端点。
如何使用 Flask 创建 API 端点
from flask import Flask
app = Flask(__name__)
@app.route('/api/data')
def get_data():
data = {"name": "John", "age": 30, "city": "New York"}
return data
if __name__ == '__main__':
app.run(port=5000)
在上面的代码中,我们定义了一个简单的 Flask
app
,其中有一个用于检索 data
的端点。“get_data”函数检索一个示例 data
对象并将其作为 JSON 返回。
总之,Python 由于其易用性和广泛存在的库,是用于处理 RESTful API 的出色语言。通过使用 Python 和 Flask
,开发人员可以快速构建高性能 REST API,使其成为许多开发项目的热门选择。