【问题标题】:Django Sendgrid authentication errorDjango Sendgrid 身份验证错误
【发布时间】:2015-01-04 19:44:18
【问题描述】:

我正在尝试通过 SendGrid API 对自己进行身份验证,以便使用模板引擎 API(为 A/B 测试创建它们),但无论如何,我都会收到 401 未经授权的错误。有人可以帮忙吗?难道我做错了什么 ?这是我的代码:

@receiver(models.signals.post_save, sender=Template)
def create_sendgrid_template(sender, instance, created, *args, **kwargs):
    url = 'https://api.sendgrid.com/v3/templates'
    sendgrid_data = {
        "name": "example_template",
    }
    if created:
        request = urllib2.Request(url)
        base64string = base64.encodestring(
            '%s:%s' % (
                SENDGRID_API_USER,
                SENDGRID_API_PASSWORD)
            ).replace('\n', '')
        request.add_header("Authorization", "Basic %s" % base64string)
        result = urllib2.urlopen(request)

【问题讨论】:

    标签: python django sendgrid


    【解决方案1】:

    尝试对您的数据进行编码并将其添加到请求中——我怀疑您是在获取而不是发布。请参阅urllib howto。验证您的凭据是否正确也是值得的。

    @receiver(models.signals.post_save, sender=Template)
    def create_sendgrid_template(sender, instance, created, *args, **kwargs):
    url = 'https://api.sendgrid.com/v3/templates'
    sendgrid_data = {
        "name": "example_template",
    }
    data = json.dumps(sendgrid_data)
    
    if created:
        request = urllib2.Request(url, data)
        base64string = base64.encodestring(
            '%s:%s' % (
                SENDGRID_API_USER,
                SENDGRID_API_PASSWORD)
            ).replace('\n', '')
        request.add_header("Authorization", "Basic %s" % base64string)
        request.add_header('Content-type', 'application/json')        
        result = urllib2.urlopen(request)
    

    如果您不想推出自己的解决方案,可以使用 sendwithusmailjet 等服务对电子邮件进行 A/B 测试。

    【讨论】:

    • 感谢您的回答。不幸的是,编码数据不起作用,由于某种原因,我仍然遇到同样的错误..
    • 我的错误,SendGrid API 接受 JSON 数据。我已经更新了我的示例以反映这一点。
    • 不幸的是,这也不起作用。虽然,我可以通过命令行使用 Curl 登录 API!还建议我使用 Requests 库而不是 Python 旧的 urllib2,所以我会尽快更新答案。
    • @Eimantas 这太奇怪了。这是我的code,这就是结果:{"name": "example_template2"}[('Content-type', 'application/json'), ('Authorization', 'Basic base64string=')]{"name": "example_template2"}{"id":"227ace2c-6a59-4298-a8d2-aecdded0da3c","name":"example_template2","versions":[]} 我认为如果您使用现有的模板名称,它会向您吐出 400。不过很高兴你想通了!
    • 不幸的是我还没弄明白,因为即使我通过Requests库提出请求,代码也不起作用。 Django 的开发服务器是在 http 上运行而不是在 https 上运行的,这可能是个问题?
    猜你喜欢
    • 1970-01-01
    • 2013-01-08
    • 2016-03-27
    • 1970-01-01
    • 2016-07-30
    • 2017-01-25
    • 1970-01-01
    • 1970-01-01
    • 2018-02-11
    相关资源
    最近更新 更多