如何使用requests.post获取网页?
使用 requests.post 方法可以通过 HTTP POST 请求获取网页。以下是使用 requests.post 的基本步骤和示例代码:
requests.post
import requests # 设置目标 URL url = "https://example.com/target-page" # 提供 POST 请求的数据(通常为表单数据) data = { "key1": "value1", "key2": "value2" } # 发起 POST 请求 response = requests.post(url, data=data) # 检查响应状态码 if response.status_code == 200: print("成功获取网页内容") print(response.text) # 打印网页内容 else: print(f"请求失败,状态码: {response.status_code}")
如果服务器需要 JSON 格式的数据,可以使用 json 参数:
json
import requests url = "https://example.com/api/endpoint" # 发送 JSON 数据 json_data = { "key1": "value1", "key2": "value2" } response = requests.post(url, json=json_data) if response.status_code == 200: print("成功获取网页内容") print(response.json()) # 打印返回的 JSON 响应 else: print(f"请求失败,状态码: {response.status_code}")
某些网站可能需要附加 headers(如 User-Agent 或 Authorization):
headers
User-Agent
Authorization
import requests url = "https://example.com/protected-page" headers = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36", "Authorization": "Bearer YOUR_ACCESS_TOKEN" } data = { "key1": "value1", "key2": "value2" } response = requests.post(url, headers=headers, data=data) if response.status_code == 200: print("成功获取网页内容") print(response.text) else: print(f"请求失败,状态码: {response.status_code}")
使用 requests.Session 可以保持会话并发送带 Cookies 的请求:
requests.Session
import requests url = "https://example.com/login" # 创建会话对象 session = requests.Session() # 登录数据 login_data = { "username": "your_username", "password": "your_password" } # 发送 POST 请求并保存 Cookies login_response = session.post(url, data=login_data) if login_response.status_code == 200: print("登录成功,Cookies 已保存") # 使用相同的会话获取受保护的页面 protected_url = "https://example.com/protected-page" protected_response = session.get(protected_url) print(protected_response.text) else: print(f"登录失败,状态码: {login_response.status_code}")
response.status_code
200
如果状态码表明失败(如 400、401、403 或 500),请检查请求参数和目标服务器的要求。
编码问题:
requests
如果响应的编码不正确,可以手动设置: python response.encoding = "utf-8"
python response.encoding = "utf-8"
处理 HTTPS 证书:
如果遇到 SSL 证书验证问题,可以禁用验证(仅用于测试环境): python response = requests.post(url, data=data, verify=False)
python response = requests.post(url, data=data, verify=False)
调试请求:
print(response.request.headers)
print(response.request.body)