首页 文章

使用Python将POST请求发送到mailchimp API

提问于
浏览
1

我正在尝试向mailchimp api发送POST请求以将新成员添加到列表中,但是我一直收到错误消息,指出api密钥丢失了 . 当我发送get请求时,我在URL中包含密钥并且它正常工作 .

从Mailchimp文档中看起来,api键应该是请求的一部分,并且参数(email_address和status)是正文的一部分,但我不明白如何使用请求 . (我知道有一个用于Python的mailchimp模块,但我有一些自定义的事情要做,我想了解这个)

这是我试图开始的POST:

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密钥 . "," instance ":"”}

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

我也尝试使用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客户端错误:错误的网址请求:https://us15.api.mailchimp.com/3.0/lists/2be23de2cc/members

2 回答

  • 3

    你为什么不试试这个套餐? 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 .

  • 1

    忽略代码 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)
    

相关问题