在Python的世界里,进行网络请求是一项常见的任务。无论是从API获取数据,还是与Web服务交互,一个强大而灵活的库是必不可少的。requests模块就是这样一个库,它以其简洁的API和强大的功能,成为了Python开发者的首选。本文将带你深入了解requests模块,让你在网络请求中游刃有余。

为什么选择requests?

requests出现之前,Python中进行HTTP请求的主流库是urllib。然而,urllib的API复杂且难以使用。requests的出现改变了这一局面,它提供了一个更人性化的接口,让发送HTTP请求变得简单直观。

安装requests

使用requests之前,你需要先安装它。如果你还没有安装,可以通过pip轻松安装:

pip install requests

基本用法

发送GET请求

发送一个GET请求是最简单的操作之一。以下是一个基本的示例:

import requests

response = requests.get('https://api.github.com')
print(response.status_code)  # 200
print(response.json())  # 打印JSON响应内容

发送POST请求

POST请求通常用于提交数据。以下是如何发送一个POST请求的示例:

import requests

url = 'https://httpbin.org/post'
data = {'key': 'value'}
response = requests.post(url, data=data)
print(response.text)

其他HTTP方法

requests支持所有主要的HTTP方法,如PUT、DELETE、HEAD等:

response = requests.put(url, data={'key': 'value'})
response = requests.delete(url)
response = requests.head(url)

requests 方法如下表:

方法

描述

delete(url, args)

发送 DELETE 请求到指定 url

get(url, params, args)

发送 GET 请求到指定 url

head(url, args)

发送 HEAD 请求到指定 url

patch(url, data, args)

发送 PATCH 请求到指定 url

post(url, data, json, args)

发送 POST 请求到指定 url

put(url, data, args)

发送 PUT 请求到指定 url

request(method, url, args)

向指定的 url 发送指定的请求方法

高级用法

会话和连接池

requests支持会话(Session)对象,它允许你跨请求保持某些参数,并且使用连接池提高性能。

s = requests.Session()
s.headers.update({'x-test': 'true'})
response = s.get('https://httpbin.org/get')

响应内容

requests提供了多种方式来处理响应内容。除了.json()方法外,你还可以获取文本或二进制内容:

text = response.text
html = response.html  # 需要安装lxml或html5lib
content = response.content

异常处理

网络请求可能会遇到各种问题,requests提供了异常处理机制:

try:
    response = requests.get('https://nonexistent.url')
except requests.exceptions.RequestException as e:
    print(e)

超时设置

设置超时可以防止程序无限期地等待响应:

response = requests.get('https://api.github.com', timeout=0.01)

代理和认证

requests还支持代理和HTTP认证:

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

auth = ('user', 'pass')

response = requests.get('https://api.github.com', proxies=proxies, auth=auth)

结语

requests模块以其简洁和强大,成为了Python中进行网络请求的首选工具。它不仅简化了HTTP请求的过程,还提供了丰富的功能来处理各种复杂的网络交互场景。掌握requests,将极大地提高你的开发效率和代码质量。