Requests库快速入门指南:Python HTTP请求的优雅解决方案
requests A simple, yet elegant, HTTP library. 项目地址: https://gitcode.com/gh_mirrors/re/requests
Requests是Python中最受欢迎的HTTP客户端库之一,它提供了简洁直观的API,让HTTP请求变得异常简单。本文将带你快速掌握Requests的核心功能。
准备工作
在开始之前,请确保:
- 已安装Requests库
- 使用的是最新版本
发起HTTP请求
Requests支持所有常见的HTTP方法,使用方式高度一致:
import requests
# GET请求
r = requests.get('https://api.example.com/events')
# POST请求
r = requests.post('https://httpbin.org/post', data={'key': 'value'})
# PUT请求
r = requests.put('https://httpbin.org/put', data={'key': 'value'})
# DELETE请求
r = requests.delete('https://httpbin.org/delete')
# HEAD请求
r = requests.head('https://httpbin.org/get')
# OPTIONS请求
r = requests.options('https://httpbin.org/get')
URL参数传递
构建带查询参数的URL时,Requests可以自动处理参数编码:
payload = {'key1': 'value1', 'key2': 'value2'}
r = requests.get('https://httpbin.org/get', params=payload)
print(r.url) # 输出: https://httpbin.org/get?key1=value1&key2=value2
参数值可以是列表,Requests会自动处理多值情况:
payload = {'key1': 'value1', 'key2': ['value2', 'value3']}
r = requests.get('https://httpbin.org/get', params=payload)
print(r.url) # 输出: https://httpbin.org/get?key1=value1&key2=value2&key2=value3
响应内容处理
Requests会自动解码响应内容,支持多种编码格式:
r = requests.get('https://api.example.com/events')
print(r.text) # 获取文本内容
print(r.encoding) # 查看当前编码
r.encoding = 'ISO-8859-1' # 修改编码
对于二进制内容:
print(r.content) # 获取二进制内容
# 处理二进制数据示例(如图片)
from PIL import Image
from io import BytesIO
i = Image.open(BytesIO(r.content))
对于JSON响应,Requests内置了解码器:
print(r.json()) # 获取JSON格式数据
高级请求特性
自定义请求头
headers = {'user-agent': 'my-app/0.0.1'}
r = requests.get('https://api.example.com/some/endpoint', headers=headers)
复杂POST请求
表单数据提交:
payload = {'key1': 'value1', 'key2': 'value2'}
r = requests.post('https://httpbin.org/post', data=payload)
JSON数据提交:
import json
payload = {'some': 'data'}
r = requests.post('https://api.example.com/some/endpoint', json=payload)
文件上传
files = {'file': open('report.xls', 'rb')}
r = requests.post('https://httpbin.org/post', files=files)
可以自定义文件名和内容类型:
files = {'file': ('report.xls', open('report.xls', 'rb'), 'application/vnd.ms-excel', {'Expires': '0'})}
r = requests.post('https://httpbin.org/post', files=files)
响应处理
状态码检查
r = requests.get('https://httpbin.org/get')
print(r.status_code) # 200
print(r.status_code == requests.codes.ok) # True
# 错误处理
bad_r = requests.get('https://httpbin.org/status/404')
bad_r.raise_for_status() # 抛出HTTPError异常
响应头信息
print(r.headers)
print(r.headers['Content-Type'])
print(r.headers.get('content-type')) # 头部名称不区分大小写
Cookies处理
# 获取Cookies
url = 'http://example.com/some/cookie/setting/url'
r = requests.get(url)
print(r.cookies['example_cookie_name'])
# 发送Cookies
cookies = dict(cookies_are='working')
r = requests.get('https://httpbin.org/cookies', cookies=cookies)
重定向与超时
重定向处理
r = requests.get('http://github.com/')
print(r.url) # 'https://github.com/'
print(r.history) # 重定向历史记录
# 禁用重定向
r = requests.get('http://github.com/', allow_redirects=False)
print(r.status_code) # 301
超时设置
# 设置超时时间为1秒
requests.get('https://github.com/', timeout=1)
# 注意:timeout不是整个下载的时间限制,而是服务器响应的等待时间
总结
Requests库通过简洁的API设计,极大地简化了Python中的HTTP请求操作。本文介绍了最常用的功能,包括:
- 各种HTTP方法的调用
- 参数传递和编码处理
- 响应内容的多种处理方式
- 自定义请求头和Cookies
- 文件上传和复杂POST请求
- 重定向控制和超时设置
掌握这些核心功能后,你就能应对大多数HTTP请求场景。Requests的优雅设计让网络请求变得简单而直观,是Python开发者不可或缺的工具。
requests A simple, yet elegant, HTTP library. 项目地址: https://gitcode.com/gh_mirrors/re/requests
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考