如何使用urllib向Datadog发送API密钥?

2024-09-19 23:26:58 发布

您现在位置:Python中文网/ 问答频道 /正文

我目前有一个程序,允许我创建仪表板并将其发布到Datadog。使用API函数here,我成功地创建、更新和删除仪表板。但是,现在我想提取我已经从Datadog创建的现有仪表板的骨架,以查看添加或删除了什么。为此,我需要弄清楚如何将API密钥与请求一起发送。我可以得到关于董事会的更高层次的信息,但我想更进一步。在

这就是我通过调用api.ScreenBoard.get_all()得到的结果

{
    'screenboards': [{
        'read_only': <boolean>,
        'resource': <resource-link>,
        'description': <description>,
        'created': <date>,
        'title': <text>,
        'modified': <date>,
        'created_by': { ''' <creator information> ''' },
        'id': <table-id>
    }]
}

现在,最终目标只是从这个命令给出的“resource”链接中提取JSON。我尝试使用urllib和urllib2将该链接与宿主站点合并(如https://www.foo.com/{resource-link}),但我一直得到以下结果:

^{pr2}$

或者

{"errors": ["API key required"]}

触发此错误的代码是:

def getSkeleton(self):
    boards = self.getAll(); # utilizing the api.ScreenBoards.get_all() function
    boardList = boards['screenboards'];
    for x in boardList:
        url = self.target + x['resource']; # creating the JSON url
        data = urllib.urlopen(url).read();
        print data

如您所见,我的“data”变量返回错误。所以,我只需要弄清楚如何将API密钥与我的请求一起发送来解决问题。如果有人知道如何执行这项任务,我将非常感激。在


Tags: selfapiurlreaddataget密钥link
2条回答

在搜索other issue时,我发现要解决这个问题,只需在URL中指定API密钥和应用程序密钥。考虑以下几点。在

def getSkeleton(self):
    api_key = 'your api key';
    app_key = 'your application key';
    boards = self.getAll(); # utilizing the api.ScreenBoards.get_all() function
    boardList = boards['screenboards'];
    for x in boardList:
        url = self.target + x['resource'] + "?api_key=" + api_key +"&application_key=" + app_key;
        data = urllib.urlopen(url).read();
        print data

使用requests库要简单得多

生成这样的请求头

def headers(apikey):
    return {'Authorization': 'Bearer {}'.format(apikey),
            'Content-Type': 'application/json'}

像这样发送请求

^{pr2}$

相关问题 更多 >