Python中如何生成与选定User Agent匹配的标准随机Client Hints?
实现方案
核心思路
- 过滤无需生成Client Hints的浏览器:直接跳过Firefox、Safari,仅处理Chrome/Chromium系浏览器
- 提取浏览器主版本号:从UA数据的
browser_version字段中提取主版本(比如114.0.0取114) - 按照真实规范生成请求头:
sec-ch-ua严格遵循Chrome的格式,其中Not=A?Brand的版本号固定为24(符合真实Chrome的发送规则)sec-ch-ua-platform直接使用UA数据中的os字段,包裹双引号
代码实现(Python示例)
def generate_client_hints(ua_data): client_hints = {} browser = ua_data.get('browser', '').lower() # 跳过Firefox和Safari if browser in ['firefox', 'safari']: return client_hints # 处理Chrome/Chromium系浏览器 if browser in ['chrome', 'chromium']: # 提取主版本号 browser_version = ua_data.get('browser_version', '') main_version = browser_version.split('.')[0] if browser_version else '0' # 生成sec-ch-ua:直接用提取的主版本,满足"不低于UA版本"的要求 sec_ch_ua = f'"Google Chrome";v="{main_version}", "Chromium";v="{main_version}", "Not=A?Brand";v="24"' client_hints['sec-ch-ua'] = sec_ch_ua # 生成sec-ch-ua-platform os_name = ua_data.get('os', '') client_hints['sec-ch-ua-platform'] = f'"{os_name}"' return client_hints # 测试示例 test_ua_data = { 'user_agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36', 'os': 'Windows', 'os_version': '10', 'browser': 'Chrome', 'browser_version': '114.0.0' } print(generate_client_hints(test_ua_data))
关键说明
- 版本要求:提取的主版本号直接使用即可保证不低于UA中的版本(UA本身就是当前浏览器的实际版本)
Not=A?Brand规则:Chrome从90版本开始,该字段的版本固定为24,完全匹配真实浏览器的发送规范- 扩展支持:如果后续需要兼容Edge等其他Chromium系浏览器,只需扩展
browser的判断条件,并调整sec-ch-ua中的浏览器名称(比如Edge对应"Microsoft Edge")
内容的提问来源于stack exchange,提问作者Harry Partridge
相关产品推荐
相关产品推荐

