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

Python循环调用Zendesk用户API时第二页出现认证失败问题

问题分析与解决

核心原因

循环请求时重复传递分页参数,导致Zendesk API解析异常,返回了误导性的"认证失败"错误。

Zendesk返回的next链接已经包含了完整的分页参数(比如page[size]和分页游标page[after]),但你的循环代码每次请求都重复传递params={'page[size]':100},这会让最终请求的URL出现重复参数(比如...?page[size]=100&page[after]=xxx&page[size]=100),触发API的异常处理,返回认证失败的错误提示。而手动请求时没有重复传参,所以可以正常运行。

解决方案

修改循环逻辑,仅在第一次请求时传递分页参数,后续请求直接使用返回的next链接,不再传递params。

修改后的代码示例

# 替换成你的Zendesk API基础地址
base_url = "https://your-zendesk-domain/api/v2/users.json"
params = {'page[size]': 100}
url = base_url

while url:
    # 第一次请求传参数,后续请求直接用完整的next链接
    if url == base_url:
        response = requests.get(url, auth=(user, pwd), params=params)
    else:
        response = requests.get(url, auth=(user, pwd))
    
    # 先检查响应状态,避免直接取字段报错
    if response.status_code != 200:
        print(f"请求失败,状态码:{response.status_code},错误信息:{response.json()}")
        break
    
    data = response.json()
    
    for user in data['users']:
        sql_statement = "insert into ..."
        cursor.execute(sql_statement)

    if data['meta']['has_more']:
        url = data['links']['next']
    else:
        url = None

更简洁的写法

直接把分页参数拼到初始URL中,后续请求完全依赖返回的next链接:

base_url = "https://your-zendesk-domain/api/v2/users.json?page[size]=100"
url = base_url

while url:
    response = requests.get(url, auth=(user, pwd))
    
    if response.status_code != 200:
        print(f"请求失败:{response.json()}")
        break
    
    data = response.json()
    
    for user in data['users']:
        sql_statement = "insert into ..."
        cursor.execute(sql_statement)

    if data['meta']['has_more']:
        url = data['links']['next']
    else:
        url = None

额外建议

  1. 每次请求后先检查响应状态码,避免因错误响应(比如认证失败、请求超限)直接访问data['users']导致KeyError。
  2. 可以打印循环中每次请求的完整URL,确认参数是否重复,方便排查问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 14:23:22