在AWS服务器上Python请求遇403 Forbidden,本地正常如何绕过?
解决AWS服务器请求Doctolib触发403 Forbidden的问题
核心原因
AWS服务器的IP段大概率被Doctolib的反爬系统标记为爬虫/数据中心IP直接拉黑,而本地民用IP不在黑名单内;同时你的请求头模拟不够完整,仅靠User-Agent不足以绕过反爬检测。
可行解决办法
1. 补全请求头,模拟真实浏览器
除User-Agent外,添加浏览器请求时的常规头字段(可在本地浏览器开发者工具中复制真实请求的完整头信息),让请求更接近普通用户的访问行为:
import requests URL = "https://www.doctolib.fr/availabilities.json?start_date=2000-01-01&visit_motive_ids=2436062&agenda_ids=146770&practice_ids=56887&limit=2" 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/webp,*/*;q=0.8", "Accept-Language": "fr-FR,fr;q=0.8,en-US;q=0.5,en;q=0.3", "Referer": "https://www.doctolib.fr/", "Accept-Encoding": "gzip, deflate, br", "Connection": "keep-alive", "Upgrade-Insecure-Requests": "1" } response = requests.get(URL, headers=headers) response.raise_for_status()
2. 使用住宅代理IP
AWS的IP属于数据中心IP,容易被识别,改用住宅代理(民用IP)转发请求,让请求源IP伪装成普通用户的IP:
import requests URL = "https://www.doctolib.fr/availabilities.json?start_date=2000-01-01&visit_motive_ids=2436062&agenda_ids=146770&practice_ids=56887&limit=2" headers = { # 填入完整请求头 } # 替换为你的住宅代理地址 proxies = { "http": "http://your-proxy-ip:port", "https": "https://your-proxy-ip:port" } response = requests.get(URL, headers=headers, proxies=proxies) response.raise_for_status()
3. 调整请求频率,添加随机延迟
避免短时间内重复请求,模拟人类访问的节奏,减少被反爬检测的概率:
import requests import time import random URL = "https://www.doctolib.fr/availabilities.json?start_date=2000-01-01&visit_motive_ids=2436062&agenda_ids=146770&practice_ids=56887&limit=2" headers = { # 填入完整请求头 } # 请求前添加随机延迟 time.sleep(random.uniform(1, 5)) response = requests.get(URL, headers=headers) response.raise_for_status()
4. 更换AWS服务器区域
不同区域的AWS IP段可能未被Doctolib拉黑,尝试将服务部署到其他AWS区域(比如欧盟的次级区域)测试。
重要提醒
目标网站的robot.txt已明确禁止爬取该链接,即使本地能正常访问,爬取行为也可能违反网站服务条款,存在法律风险。建议优先确认网站是否提供官方API,若没有,严格控制请求频率,避免对服务器造成负载压力。
内容的提问来源于stack exchange,提问作者Flabala
相关产品推荐
相关产品推荐

