在请求库中传递curl d参数时出错

2024-09-28 01:32:52 发布

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

我有一个curlPOST请求,它在终端(macOS)中工作得非常好,返回了预期的csv。RJMetrcisdocumentation中提供了以下格式(请参见“导出图形数据”)。下面是bash中的curl请求:

 curl -d "format=csv&includeColumnHeaders=1" -H "X-RJM-API-Key: myAPIkey" https://api.rjmetrics.com/0.1/figure/0000/export

我的目标是使用requests在Python中实现完全相同的curl请求。当我输入与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请求需要任何帮助


Tags: csvkeybashapiformaturldata格式
1条回答
网友
1楼 · 发布于 2024-09-28 01:32:52

在这里,您正在传递一个集合,并且希望传递一个dict或str对象

data= {'format=csv&includeColumnHeaders=1'}

替换为

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

你应该把它修好

另一方面,通过查看您的卷曲请求

这完全取决于您希望如何传递数据,下面的代码(以字符串形式传递数据负载)将直接发布数据,这将相当于curl中的原始数据

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'))

相关问题 更多 >

    热门问题