掌握HTTP请求头的设置技巧,模拟真实浏览器行为
请求头(HTTP Headers)是客户端发送给服务器的关键信息,包含浏览器类型、接受的数据格式、认证信息等。
# 常见请求头
headers = {
'User-Agent': 'Mozilla/5.0...', # 浏览器标识
'Accept': 'text/html,...', # 接受的数据类型
'Authorization': 'Bearer...', # 认证信息
'Cookie': 'session=abc123...' # 会话信息
}
标识浏览器和操作系统
Mozilla/5.0 (Windows NT 10.0; Win64; x64)
AppleWebKit/537.36 (KHTML, like Gecko)
Chrome/91.0.4472.124 Safari/537.36
指定接受的响应格式
application/json, text/plain, */*
携带认证信息
Bearer eyJhbGciOiJIUzI1NiIs...
小明是一名后端开发工程师,最近需要对接一个第三方天气API。但是无论他怎么请求,服务器总是返回403错误。 经过分析,他发现需要设置特定的请求头才能访问API。
# 小明的解决方案
import requests
# 设置完整的请求头
headers = {
'User-Agent': 'WeatherApp/1.0 (contact@example.com)',
'Accept': 'application/json',
'Accept-Language': 'zh-CN,zh;q=0.9',
'Cache-Control': 'no-cache',
'Pragma': 'no-cache'
}
url = 'https://api.weather.com/v1/current'
params = {'city': '北京', 'key': 'YOUR_API_KEY'}
response = requests.get(url, headers=headers, params=params)
if response.status_code == 200:
weather_data = response.json()
print(f"北京当前温度:{weather_data['temperature']}°C")
else:
print(f"请求失败:{response.status_code}")
设置一个基本的User-Agent请求头,访问百度首页。
# 目标:设置User-Agent为"PythonBot/1.0"
# 访问:https://www.baidu.com
# 检查响应状态码是否为200
同时设置User-Agent、Accept和Accept-Language请求头。
# 设置:
# User-Agent: MyCrawler/1.0
# Accept: application/json
# Accept-Language: zh-CN
创建一个随机User-Agent生成器,每次请求使用不同的UA。
# 从列表中随机选择:
# ["Chrome/91", "Firefox/89", "Safari/14"]
在请求头中设置Cookie信息,模拟登录状态。
# 设置Cookie:sessionid=abc123; user_id=456
设置Referer请求头,模拟从其他页面跳转过来。
# 设置Referer: https://www.example.com/page1
设置Authorization头,使用Bearer Token认证。
# 设置:Authorization: Bearer your_token_here
添加自定义的X-Requested-With和X-API-Key请求头。
# 设置:
# X-Requested-With: XMLHttpRequest
# X-API-Key: your_api_key
创建一个函数,检查并修复常见的请求头问题。
# 检查:User-Agent是否为空
# Accept是否包含必要格式
# 返回修复后的headers