python - 在请求库中传递 curl -d 参数时出错
问题描述
我有一个curl
在终端(macOS)中完美运行的 POST 请求,按预期返回 csv。RJMetrcis文档中提供了以下格式(请参阅“导出图形数据”)。这是 bash 中的 curl 请求:
curl -d "format=csv&includeColumnHeaders=1" -H "X-RJM-API-Key: myAPIkey" https://api.rjmetrics.com/0.1/figure/0000/export
我的目标是在Python中使用requests
. 当我输入与 POST 请求相同的参数时,代码无法返回错误:
import requests
headers = {'X-RJM-API-Key: myAPIkey'}
data= {'format=csv&includeColumnHeaders=1'}
url = "https://api.rjmetrics.com/0.1/figure/0000/export"
response = requests.post(url, data, headers)
这将返回错误:
TypeError: memoryview: a bytes-like object is required, not 'str'
第二次尝试:
response = requests.post(url, data=data, headers=headers)
返回
AttributeError: 'set' object has no attribute 'items'
python 中构造 POST 请求的正确格式是什么,以使其符合data = {'key':'value'}
约定并返回 csv?将 bash curl POST 转换为 python POST 请求的任何帮助将不胜感激
解决方案
在这里你传递一个集合,你应该传递一个 dict 或 str 对象
data= {'format=csv&includeColumnHeaders=1'}
替换为
data= {'format':'csv&includeColumnHeaders=1'}
应该修复它。
另一方面,通过查看您的 curl 请求..
这完全取决于您希望如何传递数据,以下代码(将数据有效负载作为字符串传递)将直接发布数据,这相当于 curl 中的 --data-raw
import requests
url = "https://api.rjmetrics.com/0.1/figure/0000/export"
payload = "'{\"format\":\"csv&includeColumnHeaders=1\"}'"
headers = {
'X-RJM-API-Key': 'myAPIkey'
}
response = requests.request("POST", url, headers=headers, data = payload)
print(response.text.encode('utf8'))
推荐阅读
- react-native - 世博小吃中的矢量图标
- java - docker-compose up 完成后如何使用故障安全运行集成测试?
- apache-kafka - Kafka Stream 输出率与窗口不符
- azure - Azure Datafactory:数据流无法访问数据库
- kubernetes - 如何在 IBM Cloud Kubernetes Service 上安装 keycloak 运算符?
- java - 如何在 java 中将 Object[] 转换为 int[]
- html - 视频无法在移动设备上调整大小
- reactjs - 我如何在文本 reactjs 中显示活动路由名称
- docker - 如何修复 ubuntu 16.04 上的错误
- azure - 是否可以不在 Application Insights 中对特定请求进行采样?