如何将 Content-Type: application/x-www-form-urlencoded 格式的数据帧行迭代到 API POST 请求中?

Posted

技术标签:

【中文标题】如何将 Content-Type: application/x-www-form-urlencoded 格式的数据帧行迭代到 API POST 请求中?【英文标题】:How to iterate rows of dataframe in Content-Type: application/x-www-form-urlencoded format into API POST request? 【发布时间】:2018-09-01 15:23:25 【问题描述】:

我有一个如下所示的数据框:

email        p[1]:
a@a.com       1
b@b.com       2 

p[1] 字段是列表 ID。

如何一次将这一数据帧的行传递到 Content-Type: application/x-www-form-urlencoded 格式的 API 发布请求中?

当我尝试这段代码时没有数据框,它可以工作:

headers = 
    'content-type': 'application/x-www-form-urlencoded',


params = 
    'email': 'peach@peach.com',
   ' p[1]': '1',


url = 'https://URL/admin/api.php?api_action=contact_add&api_output=json&api_key=123ABC' 
resp = requests.post(url, data=params, headers=headers)

如何传递数据帧的每一行以及如何将数据帧格式转换为params 等价格式?

此 api 不接受批量上传。可以在此处找到有关 API 的更多信息。 https://www.activecampaign.com/api/example.php?call=contact_add

提前谢谢你。

【问题讨论】:

【参考方案1】:

如果你想一次做一个,你想要DataFrame.iterrows

import pandas as pd

df = pd.DataFrame('email': ['a@a.com', 'b@b.com'], 'p[1]': [1,2])

for index, row in df.iterrows():
    params = 'email': row.email, 'p[1]': row['p[1]']
    print(params)

'email': 'a@a.com', 'p[1]': 1
'email': 'b@b.com', 'p[1]': 2

然后,您可以将params 传递给循环内任何您想要的对象。

【讨论】:

@RustyShackleford 这个答案在正确的轨道上,但你可以通过将 dict 转换为 pandas 来加快速度:for params in df.to_dict(orient='records'): ...

以上是关于如何将 Content-Type: application/x-www-form-urlencoded 格式的数据帧行迭代到 API POST 请求中?的主要内容,如果未能解决你的问题,请参考以下文章

POSTMAN模拟AJAX请求

Spring Boot 报错 o.s.s.concurrent.ThreadPoolTaskExecutor : Shutting down ExecutorService 'applica

如何使用 Spring Boot RestTemplate 将 Microsoft Office Mime 类型作为 Content-Type 标头发送

vue中main.js配置后端请求地址

来自 Flutter Web 的 HTTP Post 请求

如何将Google App Engine的Java Content-Type设置为UTF-8