首页 > 解决方案 > 如何使用 Python 请求在自己的行上发送带有每个有效负载的 POST 请求

问题描述

我必须向以下/batch端点发送 POST 请求:“https://www.google-analytics.com”。

如文档中所述,我必须将请求发送到/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()

但是问题仍然存在,requests这里有什么问题。

标签: pythongoogle-analyticspython-requests

解决方案


您不需要双重转义换行符。

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

您在多行字符串中的缩进也会被计算在内:

test = '''abc
def
ghi'''

print(test)

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

现在是请求正文。

文件说

payload_data – 发布请求的主体。正文必须包含 1 个 URI 编码的有效负载,并且不得超过 8192 字节。

因此,尝试对您的有效负载进行 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)


推荐阅读