You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python urllib.request访问KBB网站始终报400: Bad Request错误如何解决?

问题排查方向
  • 请求头标识异常:urllib默认发送的请求会携带User-Agent: Python-urllib/版本号的标识,KBB的反爬机制会直接拦截这类非浏览器请求,返回400错误。
  • 必要请求头缺失:目标站点要求请求携带Accept、Accept-Language等基础浏览器头字段,缺失会被判定为异常请求。
  • 代理配置异常:所用代理失效、代理与站点协议不匹配,也会触发400错误。
修复方案

按以下代码调整请求配置,优先模拟真实浏览器请求特征:

from urllib import request as urlrequest

proxy_host = '23.107.176.36:32180'
url = "https://www.kbb.com/gmc/canyon-extended-cab/2018/"

# 模拟Chrome浏览器请求头
headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36",
    "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8",
    "Accept-Language": "zh-CN,zh;q=0.9,en;q=0.8",
    "Connection": "keep-alive"
}

# 构造请求时传入头信息
req = urlrequest.Request(url, headers=headers)
req.set_proxy(proxy_host, 'https')

try:
    page = urlrequest.urlopen(req, timeout=15)
    # 打印响应状态码确认请求成功
    print("响应状态码:", page.getcode())
    # 如需读取内容可调用page.read()
except Exception as e:
    print("请求错误:", e)
    # 报错可先将代理配置到浏览器,手动访问目标站点确认代理是否可用
额外注意事项
  • 若调整后仍报错,先验证代理可用性:将代理配置到浏览器手动访问目标URL,无法访问则更换可用的HTTPS代理。
  • 确认代理类型匹配:如果所用代理为HTTP协议,需将req.set_proxy(proxy_host, 'https')的第二个参数改为http。
  • KBB有请求频率限制,不要短时间内发起大量请求,避免触发IP封禁。

内容的提问来源于stack exchange,提问作者dmort

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 17:27:03