如何使用Python请求在自己的行上使用每个有效负载发送POST请求

2024-05-05 01:47:20 发布

您现在位置:Python中文网/ 问答频道 /正文

我必须向的/batch端点发送POST请求:'https://www.google-analytics.com'.

Documentation中所述,我必须将请求发送到/batch端点,并在自己的行中指定每个有效负载。

我使用邮递员实现了这一点,如下所示:

Postman

我的查询是使用Python的requests库发出POST请求

我试过这样的方法:

import requests

text = '''v=1&cid=43223523&tid=UA-XXXXXX-1&t=event&ec=aggregated_stats&ea=daily_kpi&el=bookmarks&ev=13
v=1&cid=43223523&tid=UA-XXXXXX-1&t=event&ec=aggregated_stats&ea=daily_kpi&el=upvotes&ev=65
v=1&cid=43223523&tid=UA-XXXXXX-1&t=event&ec=aggregated_stats&ea=daily_kpi&el=questions&ev=15
v=1&cid=43223523&tid=UA-XXXXXX-1&t=event&ec=aggregated_stats&ea=daily_kpi&el=postviews&ev=95'''

response = requests.post('https://www.google-analytics.com/batch', data=text)

但它不起作用

更新

我试过这个,效果很好

import http.client

conn = http.client.HTTPSConnection("www.google-analytics.com")
payload = "v=1&cid=43223523&tid=UA-200248207-1&t=event&ec=aggregated_stats&ea=daily_kpi&el=bookmarks&ev=13\r\nv=1&cid=43223523&tid=UA-200248207-1&t=event&ec=aggregated_stats&ea=daily_kpi&el=upvotes&ev=63\r\nv=1&cid=43223523&tid=UA-200248207-1&t=event&ec=aggregated_stats&ea=daily_kpi&el=questions&ev=11\r\nv=1&cid=43223523&tid=UA-200248207-1&t=event&ec=aggregated_stats&ea=daily_kpi&el=postviews&ev=23"
headers = {
  'Content-Type': 'text/plain'
}
conn.request("POST", "/batch", payload, headers)
res = conn.getresponse()

但问题仍然悬而未决,这里的问题是什么


Tags: eventstatsbatchposteldailyuakpi
2条回答

不需要对换行符进行双转义

此外,对于多行字符串,根本不需要换行符

此外,您在多行字符串中输入的缩进也会被计算在内:

test = '''abc
def
ghi'''

print(test)

这里有一个SO答案,用一些额外的方法来解释这一点:https://stackoverflow.com/a/10660443/4570170

现在是请求主体

文件上说

payload_data – The BODY of the post request. The body must include exactly 1 URI encoded payload and must be no longer than 8192 bytes.

因此,请尝试对有效负载进行uri编码:

text = '''v=1&cid=43223523&tid=UA-XXXXXX-1&t=event&ec=aggregated_stats&ea=daily_kpi&el=bookmarks&ev=13
v=1&cid=43223523&tid=UA-XXXXXX-1&t=event&ec=aggregated_stats&ea=daily_kpi&el=upvotes&ev=65
v=1&cid=43223523&tid=UA-XXXXXX-1&t=event&ec=aggregated_stats&ea=daily_kpi&el=questions&ev=15
v=1&cid=43223523&tid=UA-XXXXXX-1&t=event&ec=aggregated_stats&ea=daily_kpi&el=postviews&ev=95'''

text_final = requests.utils.quote(text)

response = requests.post('https://www.google-analytics.com/batch', data=text_final)

最后,我自己想出了解决办法

更新以获得其他人的帮助

问题是我在AWS Cloud9上工作,正如documentation中提到的那样

Some environments are not able to send hits to Google Analytics directly. Examples of this are older mobile phones that can't run JavaScript or corporate intranets behind a firewall.

所以我们只需要包含User Agent parameter

ua=Opera/9.80

在我们的每个payloads

它起作用了

相关问题 更多 >