Python Requests 入门指南

在Python中,`requests`库是一个常用的HTTP库,用于发送HTTP请求和处理响应。它使你能够轻松地与Web服务器进行交互,获取或发送数据。

在本指南中,我们将介绍如何安装`requests`库、发送GET和POST请求、处理HTTPS请求以及处理错误和异常。

1. 安装 requests 库

首先,确保你的Python环境中已经安装了`requests`库。如果没有,可以通过以下命令使用pip进行安装:

pip install requests


2. 发送GET请求

GET请求是用于从服务器获取数据的请求。以下是一个简单的例子:

import requests

response = requests.get('https://api.example.com/data')

# 输出响应内容
print(response.text)

在上面的例子中,我们使用`requests.get()`函数发送GET请求,并将URL作为参数传递。然后,我们打印出响应的内容。

3. 发送POST请求

POST请求是用于向服务器发送数据的请求。以下是一个简单的例子:

import requests

data = {'key1': 'value1', 'key2': 'value2'}  # 发送的数据
response = requests.post('https://api.example.com/data', data=data)

# 输出响应内容
print(response.text)

在这个例子中,我们使用`requests.post()`函数发送POST请求,并将URL和要发送的数据作为参数传递。然后,我们打印出响应的内容。

4. 处理HTTPS请求

如果你的请求是HTTPS请求,那么你需要确认服务器是否支持SSL。`requests`库默认情况下会验证SSL证书,但你可以通过设置`verify`参数来改变这个行为。例如:

import requests

response = requests.get('https://api.example.com/data', verify=False)  # 不验证SSL证书
print(response.text)

注意:不验证SSL证书可能会导致安全问题,因此不建议在生产环境中这样做。

5. 处理错误和异常

在使用`requests`库时,可能会遇到各种错误和异常。例如,如果服务器返回一个错误状态码(如404),或者网络连接失败,`requests`库会抛出一个异常。为了处理这些异常,你可以使用try/except块来捕获它们:

import requests

try:
    response = requests.get('https://api.example.com/data')  # 尝试发送GET请求
    print(response.text)  # 输出响应内容
except requests.exceptions.RequestException as e:  # 捕获所有与requests相关的异常
    print(f"An error occurred: {e}")  # 输出错误信息到控制台

6. 定制请求头

有时,你可能需要向服务器发送特定的HTTP头。这可以通过在请求中提供一个字典来实现,其中包含你想要发送的头和对应的值。

例如,以下代码发送一个`Content-Type`为`application/json`的请求:

import requests

headers = {'Content-Type': 'application/json'}
response = requests.get('https://api.example.com/data', headers=headers)


7. 发送带有身份验证的请求

如果你需要向服务器发送身份验证信息,你可以通过在请求中提供一个字典来包含这些信息。这通常用于HTTP基本身份验证。

例如,以下代码发送一个带有基本身份验证的请求:

import requests

auth = ('username', 'password')  # 用你的用户名和密码替换这些占位符
response = requests.get('https://api.example.com/data', auth=auth)


8. 发送POST请求时包含JSON数据

如果你想通过POST请求发送JSON数据,你可以通过将数据传递给`json`参数来做到这一点。

例如,以下代码发送一个包含JSON数据的POST请求:

import requests

data = {'key1': 'value1', 'key2': 'value2'}  # 用你的数据替换这些占位符
response = requests.post('https://api.example.com/data', json=data)


9. 自动处理重定向

默认情况下,`requests`库会自动处理重定向。如果服务器返回一个重定向状态(如301或302),`requests`会自动跟随这个重定向。你可以通过设置`allow_redirects`参数来改变这个行为。例如,如果你想禁用自动重定向,可以这样做:

import requests

response = requests.get('https://api.example.com/data', allow_redirects=False)  # 禁用自动重定向

10. 处理会话和cookies

`requests`库支持会话和cookies处理。你可以使用`Session`对象来保持会话状态,这也可以用来管理cookies。

例如,以下代码使用会话来发送多个请求:

import requests

with requests.Session() as s:
    s.get('https://api.example.com/data1')
    s.get('https://api.example.com/data2')

在这个例子中,`Session`对象`s`被用来发送两个GET请求。由于会话保持状态,服务器返回的cookies将被自动管理。

11. 自定义请求超时

你可以通过设置`timeout`参数来定义一个请求的超时时间。

例如,以下代码设置了一个10秒的超时时间:

import requests

response = requests.get('https://api.example.com/data', timeout=10)

如果服务器在10秒内没有响应,`requests`库将抛出一个`requests.exceptions.Timeout`异常。

12. 调试HTTP请求

如果你想查看发出的HTTP请求的详细信息,你可以通过设置`debug`参数为True来实现。这将在控制台上打印出所有的HTTP头和响应详细信息。

例如,以下代码将打印出HTTP请求的详细信息:

import requests

response = requests.get('https://api.example.com/data', debug=True)

13. 使用代理

如果你需要使用代理来发送HTTP请求,你可以通过设置`proxies`参数来实现。

例如,以下代码使用一个HTTP代理来发送请求:

import requests

proxies = {
    'http': 'http://10.10.1.10:3128',
    'https': 'http://10.10.1.10:1080',
}
response = requests.get('http://example.org', proxies=proxies)


14. 设置全局默认值

如果你希望所有的请求都使用相同的设置(如代理或超时),你可以设置全局默认值。

例如,以下代码设置了一个全局默认的代理:

import requests

requests.defaults.proxies = {
    'http': 'http://10.10.1.10:3128',
    'https': 'http://10.10.1.10:1080',
}

之后发出的所有请求都将使用这个代理,除非它们指定了不同的设置。

15. 发送PUT和DELETE请求

除了GET和POST请求,你还可以使用`requests`库来发送PUT和DELETE请求。这可以通过使用`put`和`delete`函数来实现。

例如,以下代码发送一个PUT请求来更新资源:

import requests

response = requests.put('https://api.example.com/data/123', data={'key': 'value'})

以上就是一些基本的`requests`库的使用指南。在使用时,请确保你已经正确处理了所有的异常情况,并且遵守了服务器的任何特殊规定。

16. 发送自定义HTTP请求

如果你需要发送一个非标准的HTTP请求,你可以使用`requests`库的底层HTTP功能。这可以通过使用`Session`对象和`Request`对象来实现。

例如,以下代码创建一个自定义的HTTP请求:

import requests

session = requests.Session()
request = requests.Request('CUSTOM_METHOD', 'https://api.example.com/data', data={'key': 'value'})
prepared_request = session.prepare_request(request)
response = session.send(prepared_request)

在这个例子中,我们创建了一个使用自定义方法('CUSTOM_METHOD')的HTTP请求,并发送了它。

17. 捕获异常

当使用`requests`库时,你可能会遇到各种异常,如`ConnectionError`、`HTTPError`等。为了在发生异常时更好地处理错误,你应该捕获这些异常。

例如,以下代码在发送请求时捕获异常:

import requests

try:
    response = requests.get('https://api.example.com/data')
    response.raise_for_status()  # 如果状态不是200, 引发HTTPError异常
except requests.exceptions.RequestException as e:
    print(f"An error occurred: {e}")

在这个例子中,我们尝试发送一个GET请求,并捕获任何可能发生的`requests`库异常。

18. 处理响应内容

当你收到响应后,你可能需要处理响应的内容。你可以通过访问响应对象的`json`属性来自动解析JSON响应。

例如,以下代码发送一个GET请求,并处理JSON响应:

import requests

response = requests.get('https://api.example.com/data')
response.raise_for_status()  # 如果状态不是200, 引发HTTPError异常
data = response.json()  # 解析JSON响应
print(data)

19. 定制请求头部(Headers)

在某些情况下,你可能需要向服务器发送自定义的HTTP头。这可以通过在请求中提供一个`headers`参数来实现。

例如,以下代码发送一个包含自定义头的GET请求:

import requests

headers = {'User-Agent': 'my-app/0.0.1'}  # 用你自己的用户代理字符串替换 'my-app/0.0.1'
response = requests.get('https://api.example.com/data', headers=headers)


20. 使用会话(Sessions)

如果你打算在短时间内发送多个请求,可以考虑使用`requests`库的会话功能。这可以让你保持多个请求之间的状态,并使代码更简洁。

例如,以下代码使用会话来发送多个请求:

import requests

with requests.Session() as s:
    s.get('https://api.example.com/data1')
    s.get('https://api.example.com/data2')

在这个例子中,`Session`对象`s`被用来发送两个GET请求。由于会话保持状态,服务器返回的cookies将被自动管理。

21. 连接池(连接池)

对于大量并发的HTTP请求,使用连接池可以有效地管理网络连接,提高性能。`requests`库默认使用连接池来重用网络连接。

22. 配置默认值(Defaults)

如果你希望所有的请求都使用相同的设置(如代理或超时),你可以设置全局默认值。这可以通过直接修改`requests`库的默认配置来实现。

23. 处理响应体(Response Body)

在接收到响应后,你可能需要处理或解析响应体。这可能涉及将JSON响应转换为Python字典,或者处理其他格式的响应。

例如,以下代码发送一个GET请求,并处理JSON响应:

import requests

response = requests.get('https://api.example.com/data')
response.raise_for_status()  # 如果状态不是200, 引发HTTPError异常
data = response.json()  # 解析JSON响应
print(data)


24. 设置超时(Timeouts)

如果你希望限制请求的超时时间,可以通过设置`timeout`参数来实现。这可以帮助避免请求长时间未响应的情况。

例如,以下代码设置了一个5秒的超时时间:

import requests

response = requests.get('https://api.example.com/data', timeout=5)

如果在5秒内服务器没有响应,`requests`库将抛出一个`requests.exceptions.Timeout`异常。

25. 跟踪重定向(Redirects)

默认情况下,`requests`库会自动跟踪HTTP重定向,并将最终的响应返回给用户。如果你想手动处理重定向,可以通过设置`allow_redirects`参数为False来实现。

例如,以下代码发送一个GET请求,并允许重定向:

import requests

response = requests.get('https://api.example.com/data', allow_redirects=True)

如果服务器返回一个重定向状态(如301或302),`requests`库将自动跟随重定向并返回最终响应。

26. 认证(Authentication)

如果你需要向服务器发送认证信息(如基本身份验证),你可以通过设置`auth`参数来实现。

例如,以下代码使用基本身份验证来发送GET请求:

import requests
from requests.auth import HTTPBasicAuth

response = requests.get('https://api.example.com/data', auth=HTTPBasicAuth('username', 'password'))


在这个例子中,我们使用`HTTPBasicAuth`类来创建一个HTTP基本身份验证对象,并将其作为参数传递给`auth`。

27. 定制URL(Custom URL)

如果你需要向服务器发送一个自定义的URL,你可以直接将URL作为参数传递给请求方法。

例如,以下代码发送一个GET请求到自定义URL:

import requests

response = requests.get('https://api.example.com/custom-endpoint')

在这个例子中,我们向`https://api.example.com/custom-endpoint`发送一个GET请求。

28. 发送POST请求

除了GET请求,你也可以使用`requests`库来发送POST请求。这可以通过使用`requests.post`函数来实现。

例如,以下代码发送一个POST请求:

import requests

response = requests.post('https://api.example.com/data', data={'key': 'value'})

在这个例子中,我们向`https://api.example.com/data`发送一个POST请求,并将数据`{'key': 'value'}`作为参数传递给`data`。

29. 发送PUT请求

如果你需要使用PUT方法(通常用于更新资源)发送请求,你可以使用`requests.put`函数。

例如,以下代码发送一个PUT请求:

import requests

response = requests.put('https://api.example.com/data/123', data={'key': 'new-value'})

在这个例子中,我们向`https://api.example.com/data/123`发送一个PUT请求,并将数据`{'key': 'new-value'}`作为参数传递给`data`。

30. 发送DELETE请求

如果你需要使用DELETE方法(通常用于删除资源)发送请求,你可以使用`requests.delete`函数。

例如,以下代码发送一个DELETE请求:

import requests

response = requests.delete('https://api.example.com/data/123')

在这个例子中,我们向`https://api.example.com/data/123`发送一个DELETE请求。

以上就是一些常见的使用`requests`库进行HTTP请求的例子。但是请注意,这只是基础功能的一部分,`requests`库还有许多其他高级功能,例如处理HTTP响应的状态码、处理cookies、处理重定向等。

31. 处理HTTP响应的状态码

除了响应体,`requests`库还允许你检查HTTP响应的状态码,以了解请求是否成功。

例如,以下代码发送一个GET请求,并检查状态码:

import requests

response = requests.get('https://api.example.com/data')
if response.status_code == 200:
    print('Request successful')
else:
    print(f'Request failed with status code {response.status_code}')


在这个例子中,我们检查`response.status_code`来确认请求是否成功。通常,200表示成功,其他任何值表示出现某种错误。

32. 处理cookies

如果你需要与服务器进行复杂的会话,可以使用`requests`库的cookies功能。这允许你在多个请求之间保留和共享状态。

例如,以下代码发送一个GET请求,并检查返回的cookies:

import requests

response = requests.get('https://api.example.com/data')
if response.cookies:
    print('Cookies received: ', response.cookies)
else:
    print('No cookies received')

在这个例子中,我们检查`response.cookies`来查看是否收到了cookies。

33. 处理重定向

默认情况下,`requests`库会自动处理HTTP重定向。如果你想手动处理重定向,可以将`allow_redirects`参数设置为False。

例如,以下代码发送一个GET请求,并处理重定向:

import requests

response = requests.get('https://api.example.com/data', allow_redirects=False)
if response.is_redirect:
    print('Redirect detected, manual handling required')
else:
    print('No redirect detected')

在这个例子中,我们检查`response.is_redirect`来查看是否收到了重定向。如果为True,说明需要进行手动处理。

34. 定制请求头(Headers)- 续

除了之前提到的`headers`参数,`requests`库还允许你通过访问`response.headers`来查看和修改HTTP响应头。

例如,以下代码发送一个GET请求,并打印响应头:

import requests

response = requests.get('https://api.example.com/data')
print(response.headers)

此外,你还可以通过`response.headers['Content-Type']`来获取特定响应头的值。

35. 发送multipart/form-data请求

如果你需要上传文件或发送包含文件的表单数据,可以使用`requests`库的`files`参数。

例如,以下代码发送一个multipart/form-data POST请求:

import requests

with open('file.txt', 'rb') as f:
    response = requests.post('https://api.example.com/upload', files={'file': f})

在这个例子中,我们打开一个名为`file.txt`的文件,并将其作为名为`file`的表单字段发送。

36. 使用session对象

除了之前提到的会话功能,你还可以使用`requests.Session`对象来管理多个请求之间的状态。这可以通过在多个请求之间共享cookies来实现。

例如,以下代码使用session对象发送两个请求:

import requests

s = requests.Session()
s.get('https://api.example.com/data1')
s.get('https://api.example.com/data2')

在这个例子中,我们创建了一个会话对象`s`,并使用它在两个不同的请求之间共享cookies。

37. 定制网络超时(Timeouts)

如果你需要限制请求的超时时间,可以使用`requests`库的`timeout`参数。这可以帮助避免长时间未响应的请求阻塞你的程序。

例如,以下代码发送一个GET请求,并设置超时时间为5秒:

import requests

response = requests.get('https://api.example.com/data', timeout=5)

如果服务器在5秒内没有响应,`requests`库将引发一个`requests.exceptions.Timeout`异常。

38. 连接池(Connection Pooling)

对于高并发的网络请求,使用连接池可以有效地管理连接资源,避免频繁地创建和关闭连接。`requests`库默认使用连接池来重用HTTP连接。

例如,以下代码使用连接池发送多个请求:

import requests

for i in range(10):
    response = requests.get('https://api.example.com/data')
    print(response.text)

在这个例子中,尽管我们发送了10个请求,但只会创建少量的HTTP连接,因为`requests`库会重用现有的连接。

39. 跟踪请求日志(Request Logging)

如果你需要跟踪和分析HTTP请求,可以使用`logging`模块与`requests`库一起使用。你可以通过设置日志级别和添加自定义的日志处理器来实现这一点。

例如,以下代码将所有HTTP请求记录到控制台:

import logging
import requests

logging.basicConfig(level=logging.DEBUG, format='%(asctime)s %(levelname)s %(message)s')
logging.getLogger().addHandler(logging.StreamHandler())

response = requests.get('https://api.example.com/data')

40. 发送非阻塞请求(Non-blocking Requests)

如果你需要在等待HTTP响应时执行其他任务,可以使用`requests`库的异步功能。这可以通过使用`requests.get`方法的异步版本或使用`asyncio`库来实现。

例如,以下代码使用异步方式发送一个GET请求:

import asyncio
import aiohttp

async def fetch_data():
    async with aiohttp.ClientSession() as session:
        async with session.get('https://api.example.com/data') as response:
            return await response.text()

async def main():
    data = await fetch_data()
    print(data)

asyncio.run(main())

在这个例子中,我们使用`aiohttp`库来创建一个异步HTTP客户端会话,并使用`session.get`方法发送异步GET请求。然后我们等待响应的文本内容。

41. 使用HTTP代理(HTTP Proxies)

如果你需要通过HTTP代理发送请求,可以使用`requests`库的`proxies`参数。你可以传递一个字典,其中包含代理类型和代理URL。

例如,以下代码发送一个GET请求,通过一个HTTP代理:
 

import requests

proxies = {
    'http': 'http://proxy.example.com:8080',
    'https': 'http://proxy.example.com:8080',
}
response = requests.get('https://api.example.com/data', proxies=proxies)

  • 5
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值