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

Scrapy请求站点返回505状态码但浏览器可正常访问的原因及解决方法

问题成因
  • Scrapy默认使用的HTTP协议版本与目标站点支持的版本不匹配:部分低版本Scrapy默认采用HTTP/1.0发送请求,当前绝大多数站点已停止对HTTP/1.0的支持,会直接返回505状态码。
  • 未启用HTTP/2支持:目标站点强制要求使用HTTP/2协议通信,Scrapy默认关闭HTTP/2支持,使用HTTP/1.1发送的请求会被服务端直接拒绝。
  • 底层依赖版本过低:Scrapy依赖的Twisted、cryptography等库版本过旧时,TLS握手阶段无法协商到站点支持的HTTP版本,会触发服务端返回505错误。
  • 请求头校验不通过:部分站点会额外校验请求头的User-Agent、Connection等字段,如果请求头不符合规范,也会被误判为使用不支持的HTTP版本返回错误。
修复方案
  • 调整默认HTTP版本配置
    在项目的settings.py中添加如下配置,指定使用HTTP/1.1发送请求:

    DOWNLOADER_HTTP_VERSION = '1.1'
    

    若仅临时在scrapy shell中测试,可直接执行带参数的命令:

    scrapy shell -s DOWNLOADER_HTTP_VERSION='1.1' 'https://xiaohua.zol.com.cn/detail60/59411.html'
    
  • 开启HTTP/2支持
    首先安装HTTP/2相关依赖:

    pip install scrapy[http2]
    

    之后在settings.py中修改下载处理器配置,启用HTTP/2的下载 handler:

    DOWNLOAD_HANDLERS = {
        'https': 'scrapy.core.downloader.handlers.http2.H2DownloadHandler',
    }
    

    临时测试的命令如下:

    scrapy shell -s DOWNLOAD_HANDLERS='{"https": "scrapy.core.downloader.handlers.http2.H2DownloadHandler"}' 'https://xiaohua.zol.com.cn/detail60/59411.html'
    
  • 模拟浏览器请求头
    在请求中添加和浏览器一致的请求头,绕过站点基础反爬校验,scrapy shell中测试示例:

    from scrapy import Request
    req = Request(
        url='https://xiaohua.zol.com.cn/detail60/59411.html',
        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'
        }
    )
    fetch(req)
    
  • 升级底层依赖
    将Scrapy及相关依赖更新到最新版本,避免版本兼容问题:

    pip install --upgrade scrapy twisted cryptography
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 03:48:03