【问题标题】:Send POST request to mailchimp API with Python使用 Python 向 mailchimp API 发送 POST 请求
【发布时间】:2017-10-16 17:08:51
【问题描述】:

我正在尝试向 mailchimp api 发送 POST 请求以将新成员添加到列表中,但我不断收到错误消息,提示缺少 api 密钥。当我发送一个获取请求时,我在 URL 中包含了密钥并且它工作正常。

从 Mailchimp 文档看来,api 密钥应该是请求的一部分,而参数(email_address 和状态)应该是正文的一部分,但我不明白如何使用请求来做到这一点。 (我知道 Python 有一个 mailchimp 模块,但我有一些自定义的事情要做,我想了解一下)

这是我要开始的帖子:

import requests
url="https://us15.api.mailchimp.com/3.0/lists/xxxxx/members/"

header ={"Authorization":"apikey xxxxx",
"email_address":"test@gmail.com",
"status":"subscribed"}

r=requests.post(url,header)
print r.text

我收到的错误是:{"type":"http://developer.mailchimp.com/documentation/mailchimp/guides/error-glossary/","title":"API Key Missing","status":401,"detail":"您的请求不包含 API 密钥。 ","实例":""}

我还尝试将此请求放在 Postman 中,您可以轻松地将标题和正文分开,但它给出了相同的响应。

我也尝试过使用 Mailchimp3 包,但这给了我一个错误的请求。我使用的代码如下:

from mailchimp3 import MailChimp

client = MailChimp('edgar@mymailserver.nl', '{}-{}'.format('xxxxxxxxxxxxxxxxxxxxxxx','us15'))

client.lists.members.create('2be23de2cc', {'email_address': 'john.doe@example.com','status': 'subscribed'})

但是,我收到以下错误:requests.exceptions.HTTPError: 400 Client Error: Bad Request for url: https://us15.api.mailchimp.com/3.0/lists/2be23de2cc/members

【问题讨论】:

  • 您是否尝试过curl --request POST \ --url 'https://usX.api.mailchimp.com/3.0/lists/57afe96172/members' \ --user 'anystring:apikey' \ --header 'content-type: application/json' \ --data '{"email_address":"urist.mcvankab+3@freddiesjokes.com", "status":"subscribed"}' \ --include 参考developer.mailchimp.com/documentation/mailchimp/reference/lists/… 或更新列表成员尝试发送api 密钥,例如--user 'anystring:apikey'
  • 看到了curl,但是不明白怎么把这样的请求放到python代码里,所以不知道怎么试。
  • 如果您不确定如何在 python 中发送请求,请使用package
  • 这不正是我在问题中发布的代码中使用的包还是我没有得到它?

标签: python api mailchimp-api-v3.0


【解决方案1】:

为什么不试试这个包? https://github.com/charlesthk/python-mailchimp

你可以这样做:

from mailchimp3 import MailChimp
client = MailChimp('my_user', '{}-{}'.format(access_token, data_center))
client.lists.members.create('my_list_id', {'email_address': 'test@gmail.com', 'status': 'subscribed'})

在测试时,请不要使用虚假电子邮件进行测试,因为 Mailchimp 有一种全球禁止列表,可以忽略垃圾邮件发送者使用的电子邮件。在这种情况下,它将返回 HTTP 400。

【讨论】:

  • 我也尝试了这个包,但无论我尝试什么,我都会收到一个错误的请求,如下所示:requests.exceptions.HTTPError: 400 Client Error: Bad Request for url: us15.api.mailchimp.com/3.0/lists/2be23de2cc/members。而且由于我无法通过包看到实际的请求,我不知道如何继续。
  • 你能提供你使用的代码吗?并尝试在Mailchimp Playground 上对其进行测试,也许它会帮助您了解问题所在。
  • 我把我在原始问题中使用的代码,包括我得到的错误。我也会在操场上做更多的挖掘,但据我所知,我完全按照你写的去做。该 API 似乎适用于 GET 请求。
  • 在操场上,我得到了一个稍微不同的错误。那里写着:“消息:架构描述对象,找到了 NULL。”这是否意味着我没有正确格式化对象?
  • 您是仅使用虚假电子邮件还是使用真实电子邮件进行测试? Mailchimp 有一种“禁止名单”,这可能就是原因。
【解决方案2】:

忽略代码header ={"Authorization","apikey xxxxx", 中的拼写错误,您不会发送凭据或标题中的数据。您首先需要进行身份验证,然后将订阅者信息作为 POST 有效负载发送,如下所示:

import pprint
import requests

username = 'foo'
apikey = 'sekret-key-goes-here'
url = "https://us15.api.mailchimp.com/3.0/lists/xxxxx/members/"

post_params = {'email_address': 'foo@example.com', 'status': 'subscribed'}

r = requests.post(url, auth=(username, apikey), json=post_params)
r.raise_for_status()

results = r.json()
pprint.pprint(results)

【讨论】:

  • 我试过你的代码,但它也给了我一个错误:requests.exceptions.HTTPError: 400 Client Error: Bad Request for url: us15.api.mailchimp.com/3.0/lists/2be23de2cc/members 我一定犯了一个非常愚蠢的错误,但我想不通。
  • 你的意思是我自己的问题的更新版本吗?我做到了,它告诉我 API 密钥丢失了
猜你喜欢
  • 2019-10-19
  • 2020-11-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-12
  • 2015-01-26
  • 1970-01-01
相关资源
最近更新 更多