Measurement Protocol JSON payload解析失败,请求技术支持
Google Analytics调试接口POST请求错误修复方案
错误原因
你使用的是GA4 Measurement Protocol调试接口,但犯了两个关键错误:
- 请求格式错误:用
data=payload发送了表单编码数据,而接口要求接收application/json格式的JSON字符串,导致解析时遇到开头的v字符而非JSON的{,触发解析失败。 - 参数结构错误:沿用了UA(旧版谷歌分析)的参数格式(如
t、ec、cid),但GA4的Measurement Protocol有完全不同的结构要求。
修正方案
1. 准备必要参数
从GA4后台获取:
measurement_id:即你原代码中的tracking_id(格式为G-XXXXXXX)api_secret:在GA4后台「管理」→「数据流」→ 对应数据流 →「Measurement Protocol API密钥」中创建
2. 修正代码
import requests # 替换为你的实际参数 measurement_id = "G-XXXXXXX" api_secret = "你的API密钥" # 构造正确的调试接口URL,需携带measurement_id和api_secret url = f"https://www.google-analytics.com/debug/mp/collect?measurement_id={measurement_id}&api_secret={api_secret}" # GA4要求的payload结构 payload = { "client_id": "555", # 对应原UA的cid,用于标识用户 "events": [ { "name": "file_download", # 事件名称 "params": { "event_category": "download", # 对应原UA的ec "event_label": data['file_name'], # 对应原UA的el "value": 1, # 对应原UA的ev "cd5": data['hash'] # 自定义维度 } } ] } # 使用json参数发送请求,自动处理JSON编码和Content-Type头 response = requests.post(url, json=payload) print(response.text)
关键说明
- GA4的Measurement Protocol要求
measurement_id和api_secret必须作为URL查询参数传递,不能放在payload里 - 所有事件必须包裹在
events数组中,每个事件需指定name(事件名)和params(事件参数) - 用
json=payload替代data=payload,确保请求体是标准JSON格式,requests会自动设置Content-Type: application/json头
当请求格式正确时,调试接口会返回validationMessages为空的响应,说明数据可被正常解析。
内容的提问来源于stack exchange,提问作者A O
相关产品推荐
相关产品推荐

