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

Matomo API.getBulkRequest在python-requests中返回空列表求助

排查Matomo API.getBulkRequest在requests中失效的问题

我来帮你梳理几个最容易踩坑的点,这些情况经常导致API.getBulkRequest在Python requests里出错,但浏览器里却能正常运行:

  • 请求体格式错误
    Matomo的批量接口要求请求体是JSON数组格式,但很多人会误用data参数传递数据(这会被编码成表单格式),而不是json参数。浏览器会自动处理JSON序列化,但requests需要你明确指定:

    import requests
    
    # 正确构造批量请求的JSON数组
    bulk_payload = [
        {"method": "VisitsSummary.get", "params": {"idSite": 1, "period": "day", "date": "today"}},
        {"method": "Actions.getPageUrls", "params": {"idSite": 1, "period": "day", "date": "today"}}
    ]
    
    response = requests.post(
        "https://你的Matomo地址/index.php",
        params={
            "module": "API",
            "method": "API.getBulkRequest",
            "format": "json",
            "token_auth": "你的授权令牌"
        },
        json=bulk_payload  # 用json参数自动序列化并设置Content-Type
    )
    

    如果之前用了data=bulk_payload,Matomo会无法解析请求体,自然返回错误。

  • 请求方法不匹配
    浏览器里你大概率用的是POST请求,但如果代码里误用了GET,就会因为URL长度限制或者参数传递方式不对导致失败。API.getBulkRequest仅支持POST,务必确认代码里用的是requests.post而不是get。

  • 授权令牌的位置问题
    有些时候把token_auth放在请求体里会触发Matomo的权限验证问题,建议和浏览器请求保持一致——通常放在URL的查询参数里是最稳妥的,就像上面的示例那样。

  • Headers缺失或不一致
    浏览器会自动带上Content-Type: application/json这类必要头,但如果是手动构造请求头,很容易遗漏。用json参数传递数据时,requests会自动添加正确的Content-Type,这比手动设置更可靠。

  • 子请求的参数细节错误
    仔细对比浏览器里的请求体和代码中的bulk_payload,看看有没有参数拼写错误(比如idSite写成idsite,Matomo参数是大小写敏感的)、日期格式不对或者站点ID错误。哪怕一个子请求的参数出错,整个批量请求都会失败。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 07:15:45