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

Python循环调用REST API返回403,单独调用正常求解决

问题排查与解决

首先你的代码里存在一个明显的错误,这大概率是导致前几次请求403的核心原因:

代码错误修复

你先对每行ID做了x = i.strip()处理(去除换行、空格等空白字符),但拼接请求URL时却用了未处理的i而非处理后的x。这会让大部分请求的URL携带换行符(文件每行末尾默认的换行),服务器无法识别无效的资源路径,因此返回403;而文件最后一行通常没有换行符,i和x内容一致,所以请求成功。

修复后的循环代码:

for i in f:
    x = i.strip()
    x = str(x)
    if x:
        # 改用处理后的x拼接URL
        Nurl = url + x
        print(Nurl)
        response_raw = requests.get(Nurl, headers=headers, auth=HTTPBasicAuth('user_abc', 'abc123'))
        print(response_raw)

其他可能的问题与解决

如果修复后仍出现403,可排查以下情况:

  • 速率限制触发:多数API会限制单位时间内的请求次数,循环请求过快会触发限流。可添加请求间隔:

    import time
    
    # 循环内请求后添加延迟
    response_raw = requests.get(...)
    print(response_raw)
    time.sleep(1)  # 暂停1秒,可根据API文档调整时长
    
  • 会话复用异常:多次独立请求可能导致认证状态无法正确维持,使用requests.Session()复用连接和认证信息:

    # 创建会话对象,统一管理认证和请求头
    session = requests.Session()
    session.auth = HTTPBasicAuth('user_abc', 'abc123')
    session.headers.update(headers)
    
    for i in f:
        x = i.strip()
        if x:
            Nurl = url + x
            print(Nurl)
            response_raw = session.get(Nurl)
            print(response_raw)
    
  • 服务器反爬拦截:部分服务器会拦截非浏览器标识的请求,可在请求头中添加User-Agent模拟浏览器:

    headers = {
        'Connection': 'keep-alive',
        'Content-Type': 'application/json',
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36'
    }
    

内容的提问来源于stack exchange,提问作者Sam Francis

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 16:32:39