Python requests模块详细讲解
一、简介
requests
是Python中一个非常流行且功能强大的HTTP客户端库。它允许你使用Python语言发送所有类型的HTTP请求,如GET、POST、PUT、DELETE等。requests
模块基于urllib3开发,但比urllib3更加简单易用。它提供了丰富的API,使得发送HTTP请求和处理响应变得轻而易举。
二、安装
要使用requests
模块,首先需要安装它。你可以使用pip命令进行安装:
pip install requests
三、基本用法
GET请求
import requests
response = requests.get('https://www.example.com')
print(response.text) # 打印响应内容
POST请求
import requests
payload = {'key1': 'value1', 'key2': 'value2'}
response = requests.post('https://www.example.com/post', data=payload)
print(response.text)
其他请求方法
requests
还支持PUT、DELETE、HEAD等HTTP方法。
response = requests.put('https://www.example.com/put', data=payload)
response = requests.delete('https://www.example.com/delete')
response = requests.head('https://www.example.com/head')
四、响应处理
状态码
print(response.status_code) # 打印HTTP状态码
响应头
print(response.headers) # 打印响应头信息
响应内容
print(response.text) # 打印响应内容(字符串形式)
print(response.json()) # 如果响应内容是JSON格式,可以使用此方法解析
print(response.content) # 打印响应内容(字节形式)
错误处理
如果请求发生错误,requests
会抛出一个requests.exceptions.RequestException
异常。你可以使用try-except语句来捕获这个异常。
try:
response = requests.get('https://www.example.com/invalid')
print(response.text)
except requests.exceptions.RequestException as err:
print(err)
五、高级特性
参数传递
在GET请求中,你可以使用params
参数来传递查询字符串。
payload = {'key1': 'value1', 'key2': 'value2'}
response = requests.get('https://www.example.com/get', params=payload)
print(response.url) # 打印完整的URL,包括查询字符串
自定义请求头
你可以使用headers
参数为请求添加自定义的头部信息。
headers = {'User-Agent': 'my-app/0.0.1'}
response = requests.get('https://www.example.com', headers=headers)
文件上传
使用files
参数可以上传文件。
files = {'file': open('path/to/file', 'rb')}
response = requests.post('https://www.example.com/upload', files=files)
认证
使用auth
参数可以为请求添加HTTP认证。
from requests.auth import HTTPBasicAuth
response = requests.get('https://www.example.com', auth=HTTPBasicAuth('username', 'password'))
超时设置
使用timeout
参数可以为请求设置超时时间。
response = requests.get('https://www.example.com', timeout=5) # 超时时间为5秒
代理设置
使用proxies
参数可以设置代理服务器。
proxies = {
'http': 'http',
'https': 'http',
}
response = requests.get('https://www.example.com', proxies=proxies)
Session对象
requests.Session
对象允许你跨多个请求保持某些参数和cookies。这对于需要在多个请求之间保持状态的场景非常有用,如登录会话或API交互。
import requests
# 创建一个Session对象
s = requests.Session()
# 使用Session对象发送GET请求
response = s.get('https://www.example.com/login', auth=('user', 'pass'))
# 检查我们是否登录成功
print(response.text)
# 发送另一个请求,这个请求将携带上一次的cookies
response = s.get('https://www.example.com/user/profile')
print(response.text)
Cookies
requests
库会自动处理cookies。当服务器在响应中设置cookies时,requests
会在随后的请求中携带这些cookies。
response = requests.get('https://www.example.com')
# 获取cookies
cookies = response.cookies
print(cookies['cookie_name'])
# 发送带有特定cookies的请求
response = requests.get('https://www.example.com', cookies={'cookie_name': 'cookie_value'})
SSL证书验证
默认情况下,requests
会对HTTPS请求进行SSL证书验证。如果你需要跳过证书验证(不推荐在生产环境中这样做),可以传递verify=False
参数。
response = requests.get('https://www.example.com', verify=False)
异常处理
requests
库定义了一些特定的异常,你可以使用它们来更好地处理请求过程中可能出现的错误。
from requests.exceptions import RequestException, HTTPError, ConnectionError, Timeout
try:
response = requests.get('https://www.example.com')
response.raise_for_status() # 如果不是2xx响应则会抛出HTTPError异常
except RequestException as e:
# 处理所有requests相关的异常
print(e)
except HTTPError as e:
# 处理HTTP错误
print(e)
except ConnectionError as e:
# 处理连接错误
print(e)
except Timeout as e:
# 处理超时错误
print(e)