python - 如何使用 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
这里有什么问题。
解决方案
您不需要双重转义换行符。
此外,多行字符串根本不需要换行符。
您在多行字符串中的缩进也会被计算在内:
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)
推荐阅读
- python - 如何使用 VS 代码 - Python Shell
- firebase - 关闭应用程序时,Firebase FIrestore 侦听器是否取消订阅?
- forms - 播放 - 带有自定义错误消息的自定义验证
- list - 从列表中获取项目作为 Ansible 中的字符串
- reactjs - React 重置按钮中的井字游戏不起作用
- spring-boot - rsocket 使用 RSocket-Java 为 Spring Rsocket Server 路由元数据
- html - 如何在调整大小后将文本与顶部对齐php - 在 ajax URL 前面添加斜杠和不添加斜杠有什么区别
- php - PHP Sqlite Drop Table 未执行
- html - Angular:如何使内容可编辑的div的占位符持续存在,直到仅在输入内容时