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

本地正常的URL抓取代码在远程服务器报HTTP Error 403: Forbidden

远程服务器抓取https://bithumb.cafe/notice触发403 Forbidden的原因及解决思路

兄弟,这种本地跑正常、远程服务器就报错的情况太常见了,大概率是目标网站的反爬机制盯上了你服务器的特征,跟代码本身关系不大。我给你拆解几个最可能的原因,再给点实用的解决思路:

核心原因分析

  • 服务器IP被列入黑名单/限制列表
    很多网站会专门针对云服务商(比如AWS、阿里云、DigitalOcean这类)的IP段做拦截,因为这些IP经常被批量爬虫滥用。你本地的家庭/办公IP属于普通民用段,不在反爬的重点监控范围内,但服务器IP可能已经被标记成“可疑爬虫IP”了。

  • 请求头太简陋,被识别为非浏览器请求
    你加了User-Agent是好事,但第一个代码里用的cheese这种UA太随意了,完全不像正常浏览器的标识;就算第二个代码用了Mozilla/5.0,也只补了这一个头。现在很多网站会校验完整的请求头组合,比如Accept、Accept-Language、Referer、Connection这些,本地浏览器发起请求时会自动带上这些字段,而你远程的请求缺了这些,很容易被判定为爬虫。

  • 远程服务器的请求模式触发频率限制
    本地测试一般是手动单次请求,频率很低;但远程服务器可能是定时批量运行,短时间内多次请求目标站,直接触发了对方的频率阈值,给你返回403。

  • 网络环境特征暴露
    有些服务器会通过特定的代理出口IP访问,或者所在的IP段有大量爬虫活动记录,目标网站通过IP归属地、网络环境特征直接拦截了这类请求。

对应的解决思路

  1. 优化请求头,模拟真实浏览器
    把请求头补全成和真实浏览器一致的样子,比如用Chrome的完整请求头:

    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.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.8,en-US;q=0.5,en;q=0.3',
        'Referer': 'https://bithumb.cafe/',
        'Connection': 'keep-alive',
        'Upgrade-Insecure-Requests': '1',
    }
    

    然后把这些头加到你的Request对象里,替换掉之前简陋的UA。

  2. 更换请求IP

    • 试试切换服务器的IP(有些云服务商支持更换实例IP);
    • 或者用代理IP池,每次请求换一个IP;
    • 也可以给服务器挂个VPN,让请求从民用IP段发出。
  3. 降低请求频率
    如果是定时任务,把请求间隔拉长,比如从每分钟一次改成每5分钟一次,避免短时间内多次触发反爬机制。

  4. 尝试用无头浏览器模拟请求
    如果上面的方法都不行,可以试试用Selenium或者Playwright这类工具,模拟真实浏览器的行为(包括渲染JS、自动生成完整请求头),这种方式更难被反爬识别,不过服务器资源消耗会高一点。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 07:29:15