如何使用 urllib 向 Datadog 发送 API 密钥?
How do you send an API key to Datadog using urllib?
我目前有一个程序允许我以编程方式为 Datadog 创建和 post 仪表板。使用 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" link 中提取 JSON。我尝试使用 urllib 和 urllib2 将 link 与主机站点合并(如 https://www.foo.com/{resource-link}
),但我不断得到以下结果:
<addinfourl at 0000000000 whose fp = <socket._fileobject object at 0x000000000>>
或
{"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" 变量 returns 出错了。因此,我只需要弄清楚如何发送 API 密钥以及我的解决问题的请求。如果有人知道如何执行此任务,我将不胜感激。
使用 requests 库简单多了
像这样生成一个请求头
def headers(apikey):
return {'Authorization': 'Bearer {}'.format(apikey),
'Content-Type': 'application/json'}
像这样发送请求
result = get(url, headers=headers(apikey))
在搜索此 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
我目前有一个程序允许我以编程方式为 Datadog 创建和 post 仪表板。使用 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" link 中提取 JSON。我尝试使用 urllib 和 urllib2 将 link 与主机站点合并(如 https://www.foo.com/{resource-link}
),但我不断得到以下结果:
<addinfourl at 0000000000 whose fp = <socket._fileobject object at 0x000000000>>
或
{"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" 变量 returns 出错了。因此,我只需要弄清楚如何发送 API 密钥以及我的解决问题的请求。如果有人知道如何执行此任务,我将不胜感激。
使用 requests 库简单多了
像这样生成一个请求头
def headers(apikey):
return {'Authorization': 'Bearer {}'.format(apikey),
'Content-Type': 'application/json'}
像这样发送请求
result = get(url, headers=headers(apikey))
在搜索此 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