首页 > 解决方案 > cURL POST 请求不能作为等效的 python 请求工作

问题描述

我有一个curlPOST 请求,它按预期在终端中返回 CSV。RJMetrcis文档中提供了以下格式(请参阅“导出图形数据”)。这是 bash 中的 curl 请求:

curl --data-raw "format=csv&includeColumnHeaders=1" -H "X-RJM-API-Key: myapikey" https://api.rjmetrics.com/0.1/figure/12345/export

或者,使用-d代替--data-raw也可以

但是,在使用Python 的前一篇文章的帮助下进行复制时,会返回错误requests

url = "https://api.rjmetrics.com/0.1/figure/12345/export"

payload = "'{\"format\":\"csv&includeColumnHeaders=1\"}'"
headers = {
  'X-RJM-API-Key': 'myapikey'
}

response = requests.request("POST", url, headers=headers, params=payload)
response.text

'{"Error":"Invalid Argument: CSV is currently the only supported format for SQL Reports"}'

这是 API 返回的特定错误,指示未请求 CSV 格式(当-dbash 命令被忽略时,会引发相同的错误)。但是,这两个请求在语法上是相同的。这里的 Python 问题可能是什么?是否有传递参数的首选方法?

标签: pythoncurlpostpython-requests

解决方案


import requests

data = {
    'format': 'csv',
    'includeColumnHeaders': 1
}

headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:81.0) Gecko/20100101 Firefox/81.0',
    'X-RJM-API-Key': 'yourapi'
}


def main(url):
    r = requests.post(url, data=data, headers=headers)
    print(r)


main("https://api.rjmetrics.com/0.1/figure/12345/export")

推荐阅读