发布到Google Analytics,从Node工作,从Python失败......为什么?



我正在尝试将事件发布到Google Analytics。当我使用下面的 NodeJS 代码执行此操作时,它工作正常,但当我使用下面的 Python 代码时失败。两者都会返回HTTP 200,即使在发布到调试URL时(https://www.google-analytics.com/debug/collect(,Google Analytics也会在这两种情况下返回成功详细信息(请参阅下面的响应中的valid:true(。问题是,当从 NodeJS 发布时,结果显示在 GA 网站上,当从 Python 发布时,它永远不会显示。我确实比较了两者的请求,但无法发现差异。

{
"hitParsingResult": [ {
"valid": true,
"parserMessage": [ ],
"hit": "/debug/collect?v=1u0026t=eventu0026tid=XXXXXXXu0026cid=YYYYYYu0026ec=Slacku0026ea=SlashCommandu0026el=whowasat-curlu0026an=staging.Whereis-Everybody?u0026aid=staging.whereis-everybody.com"
} ],
"parserMessage": [ {
"messageType": "INFO",
"description": "Found 1 hit in the request."
} ]
} 

NodeJS代码是(结果确实显示在Google Analytics中(:

'use strict';
var request = require('request');
require('request-debug')(request);
function postEventToGA(category, action, label) {
var options = {
v: '1',
t: 'event',
tid: process.env.GOOGLEANALYTICS_TID,
cid: process.env.GOOGLEANALYTICS_CID,
ec: category,
ea: action,
el: label,
an: process.env.STAGE_INFIX + "appname",
aid: process.env.STAGE_INFIX + "appname"
};
console.log("payload: " + JSON.stringify(options))
request.post({ url: 'https://www.google-analytics.com/collect', form: options }, function (err, response, body) {
console.log(request)
if (err) {
console.log("Failed to post event to Google Analytics, error: " + err);
} else {
if (200 != response.statusCode) {
console.log("Failed to post event to Google Analytics, response code: " + response.statusCode + " error: " + err);
}
}
});
}
postEventToGA("some-category", "some-action", "some-label")

Python 代码是(结果未显示在 Google Analytics 中(:

import json
import logging
import os
import requests
LOGGER = logging.getLogger()
LOGGER.setLevel(logging.INFO)
GOOGLEANALYTICS_TID = os.environ["GOOGLEANALYTICS_TID"]
GOOGLEANALYTICS_CID = os.environ["GOOGLEANALYTICS_CID"]
STAGE_INFIX = os.environ["STAGE_INFIX"]
def post_event(category, action, label):
payload = {
"v": "1",
"t": "event",
"tid": GOOGLEANALYTICS_TID,
"cid": GOOGLEANALYTICS_CID,
"ec": category,
"ea": action,
"el": label,
"an": STAGE_INFIX + "appname,
"aid": STAGE_INFIX + "appname",
}
response = requests.post("https://www.google-analytics.com/collect", payload)
print(response.request.method)
print(response.request.path_url)
print(response.request.url)
print(response.request.body)
print(response.request.headers)
print(response.status_code)
print(response.text)
if response.status_code != 200:
LOGGER.warning(
"Got non 200 response code (%s) while posting to GA.", response.status_code
)

post_event("some-category", "some-action", "some-label")

知道为什么NodeJS帖子会出现在Google Analytics中而Python帖子不会出现吗? (虽然两者都返回HTTP200(

做了更多的测试,发现用户代理HTTP标头导致了问题。当我在 Python 代码中将其设置为空字符串时,它可以工作。喜欢这个:

headers = {"User-Agent": ""}
response = requests.post(
"https://www.google-analytics.com/collect", payload, headers=headers
)

https://developers.google.com/analytics/devguides/collection/protocol/v1/reference 的文档确实指出使用了用户代理,但没有明确说明要求是什么。"python-requests/2.22.0"(python-requests lib的默认值(显然不被接受。

最新更新