使用requests_ip_rotator爬虫触发TooManyRedirects 30次重定向错误如何解决
TooManyRedirects错误解决方案
以下是可依次尝试的解决步骤:
- 排查重定向根源
先禁用自动重定向,查看返回的状态码、重定向目标地址和响应内容,确认是否为死循环、验证页跳转或域名校验错误:
import requests from requests_ip_rotator import ApiGateway, EXTRA_REGIONS if __name__ == "__main__": gateway = ApiGateway("https://spare.avspart.com", regions=EXTRA_REGIONS, access_key_id = 'my key', access_key_secret = 'my secret key') gateway.start(force=True) session = requests.Session() session.mount("https://spare.avspart.com", gateway) session.headers['User-Agent'] = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/34.0.1847.131 Safari/537.36' # 禁用自动重定向,查看首次请求结果 response = session.get("https://spare.avspart.com/catalog/case/64848/4534337/677993/", allow_redirects=False) print("状态码:", response.status_code) print("重定向目标:", response.headers.get('Location')) print("前500字响应内容:", response.text[:500]) gateway.shutdown()
如果返回的重定向地址就是当前请求的地址,说明触发了站点的反爬规则,返回了循环重定向;如果跳转到登录/验证页,说明需要补充校验参数。
- 补全完整请求头
多数站点不会只校验User-Agent,还会校验其他浏览器标准头,补充以下头信息再尝试:
session.headers.update({ 'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) 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': 'en-US,en;q=0.9', 'Accept-Encoding': 'gzip, deflate, br', 'Connection': 'keep-alive', 'Upgrade-Insecure-Requests': '1', 'Referer': 'https://spare.avspart.com/' })
- 修正网关Host头配置
ApiGateway默认转发时可能会使用AWS网关的域名作为Host头,触发站点的域名校验,导致强制重定向到正确域名,形成死循环。修改网关初始化参数,强制指定Host头:
gateway = ApiGateway("https://spare.avspart.com", regions=EXTRA_REGIONS, access_key_id = 'my key', access_key_secret = 'my secret key', host="spare.avspart.com")
- 解决TLS指纹识别问题
如果以上步骤都无效,说明站点识别了requests的默认TLS指纹,就算更换IP也会被拦截。可以使用curl_cffi库替代requests,模拟真实浏览器的TLS指纹,配合IP轮换方案使用。 - 手动处理重定向
如果存在少量跳转,可以禁用自动重定向,手动处理每一次跳转,每次跳转都重新生成新的网关会话,避免同一个IP触发多次拦截。
内容的提问来源于stack exchange,提问作者user6009994
相关产品推荐
相关产品推荐

