Python Requests代码昨日正常今日返回TooManyRedirects错误求助
解决requests请求出现TooManyRedirects的问题
针对你遇到的问题,提供以下几种可行的解决方案:
1. 使用Session保持会话并携带完整浏览器请求头
网站可能通过识别请求头中的User-Agent等字段判断请求来源,Colab默认的requests请求头容易被反爬机制识别,导致循环重定向。使用requests.Session()可以在重定向过程中自动保持会话状态和请求头,避免被拦截:
import requests import json def GetAllStocks(): url = 'https://iboard.ssi.com.vn/dchart/api/1.1/defaultAllStocks' # 模拟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': 'application/json, text/plain, */*', 'Referer': 'https://iboard.ssi.com.vn/' } with requests.Session() as session: session.headers.update(headers) response = session.get(url) response.raise_for_status() # 主动抛出HTTP状态码错误 return response.json() # 直接使用response.json()解析,比json.loads更高效
2. 手动处理302重定向
如果自动重定向出现循环,可以手动获取重定向地址并发起请求:
import requests import json def GetAllStocks(): url = 'https://iboard.ssi.com.vn/dchart/api/1.1/defaultAllStocks' 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': 'application/json, text/plain, */*', 'Referer': 'https://iboard.ssi.com.vn/' } with requests.Session() as session: session.headers.update(headers) # 禁止自动重定向,获取302响应中的Location first_response = session.get(url, allow_redirects=False) if first_response.status_code == 302: redirect_url = first_response.headers.get('Location') if redirect_url: # 处理相对路径的重定向地址 if not redirect_url.startswith('http'): redirect_url = 'https://iboard.ssi.com.vn' + redirect_url # 请求重定向后的地址 final_response = session.get(redirect_url) final_response.raise_for_status() return final_response.json() else: first_response.raise_for_status() return first_response.json()
3. 检查Colab环境IP是否被限制
Colab的服务器IP属于云服务商段,可能被目标网站的反爬策略标记为异常流量。可以先在本地运行上述代码测试,如果本地正常,说明是Colab的IP问题:
- 尝试重启Colab运行时,重新分配IP
- 考虑使用代理IP(需注意合规性)
内容的提问来源于stack exchange,提问作者toidayma
相关产品推荐
相关产品推荐

