API POST Response 仅读取转换为列表的数据帧的最后一条记录,如何更改?

Posted

技术标签:

【中文标题】API POST Response 仅读取转换为列表的数据帧的最后一条记录,如何更改?【英文标题】:API POST Response only reading last record of dataframe converted to list, how to change? 【发布时间】:2018-09-01 05:27:19 【问题描述】:

我正在尝试通过 POST 命令将数据传递到 API。 API 仅采用 Content-Type: application/x-www-form-urlencodedformat 格式的数据。我还不熟悉这种格式。可以在此处找到有关我尝试进行的特定 API 调用的信息。 https://www.activecampaign.com/api/example.php?call=contact_add

数据位于具有以下字段的数据框中。

     email                 p[1]*
0     belle@yandex.com      1
1  apple765@yandex.com      1
2   pear432@yandex.com      1

根据文档p[1] 是指定我希望数据进入哪个列表的字段。

我运行的代码如下:

df1 = pd.DataFrame('email':['belle@yandex.com','apple765@yandex.com','pear432@yandex.com'], 'p[1]*':1)

#I think Content-Type: application/x-www-form-urlencoded formated data takes list format#

df1 = df1.to_dict(orient = 'list')

url = 'https://URL/admin/api.php?api_action=contact_add&api_output=json&api_key=123ABC' 

resp = requests.post(url, data=df1, headers=headers)

print(resp.text)

响应对象resp 返回 200,但在电子邮件活动列表中,我只看到第 2 行中的最后一个电子邮件地址仅出现。为什么是这样 ?我究竟做错了什么?

提前谢谢你。

【问题讨论】:

【参考方案1】:

基本上服务器通过发送 201 状态码来确认对象的创建,但有些服务器返回 200。我想知道您是否已经创建了这些对象... 我也不确定您是否需要 p[1] 之后的星号(在快速查看文档后,我认为 p 应该只指向列表 ID),但这需要您检查。

【讨论】:

你说得对,不需要星号。现在我不知道如何将每个电子邮件地址的数据帧迭代到 api 中。任何想法如何做到这一点? 所以看起来你可以在每个请求中添加一条记录,所以如果你想遍历 Dataframe 中的电子邮件,你应该这样做:for email in df1['email'] : # 发送请求 resp = requests.post(url, data='email': email, 'p[1]':1) 太棒了!很高兴能帮助交配!

以上是关于API POST Response 仅读取转换为列表的数据帧的最后一条记录,如何更改?的主要内容,如果未能解决你的问题,请参考以下文章

BigQuery:将数组中的键值对转换为列

在 Web API 2 中读取 POST 请求正文

在 Spark 中将 Json 键转换为列

Express起步 - 路由基础 - 请求对象request - 响应对象response - 增删改查API案例

Response.Redirect 在自定义 HttpModule 中使用 POST 方法

cors 中间件并在 post api 上出错