【发布时间】:2016-10-06 18:57:05
【问题描述】:
我正在尝试通过他们的 API 从我的 SendGrid 帐户获取数据。我正在使用经典的 ASP。我找到了some code that works,除了我需要按照in their documentation 的描述添加对SendGrids API 的授权。
我发现几个示例似乎表明我需要在 xmlhttp.open 之后和 xmlhttp.send 之前添加 xmlhttp.setRequestHeader 但是当我取消注释下面的“xmlhttp.setRequestHeader”行时,我在我的浏览器。谁能告诉我现在将授权部分添加到 xmlhttp 对象?
为清楚起见进行编辑:当我评论“xmlhttp.setRequestHeader...”行时,脚本运行并返回预期的 json 结果,表明我需要进行身份验证。当我取消注释该行时,我收到 500 错误。我在下面的代码中用通用占位符替换了我的工作 api 密钥(使用 cURL 命令测试)。真正的密钥在我服务器上的文件中。
这是我正在使用的代码:
<%@ Language=VBScript %>
<%
Set xmlhttp = CreateObject("Msxml2.ServerXMLHTTP.6.0")
xmlhttp.open "GET", "https://api.sendgrid.com/v3/campaigns?limit=10&offset=0 HTTP/1.1", false
'xmlhttp.setRequestHeader "Authorization", "Bearer my-correct-sendgrid-api-key"
xmlhttp.send ""
Response.AddHeader "Content-Type", "application/json;charset=UTF-8"
Response.Charset = "UTF-8"
pageReturn = xmlhttp.responseText
Set xmlhttp = Nothing
response.write pageReturn
%>
似乎基础工作正常,因为上面的代码返回了预期的 json 结果,错误消息说我需要进行身份验证:
{
errors: [
{
field: null,
message: "authorization required"
}
]
}
SendGrids 文档使用此示例:
GET https://api.sendgrid.com/v3/resource HTTP/1.1
Authorization: Bearer Your.API.Key-HERE
【问题讨论】:
-
在您的代码中,
xmlhttp.setRequestHeader...行被注释了吗? -
有added correct syntax highlighting 应该强调@SearchAndResQ 的观点。
'字符在 VBScript 中用于注释掉一行,这意味着 VBScript 将在执行时忽略它,因此目前xmlhttp.setRequestHeader "Authorization", "Bearer my-correct-sendgrid-api-key"被忽略。删除'评论。 -
感谢您的回复,该行已被注释,因为当我取消注释时会产生 500 错误。我想问一下这是否是添加身份验证的正确方法,如果是,我该如何排除故障?
-
这是一个
Authorization标头,是的,是检查授权的正确方法,并且被许多主流 API 使用。如果他们希望您传递 HTTPAuthorization标头,那么这就是您传递的内容,但显然Your.API.Key-HERE需要替换为 API 创建者 提供的真实 API 密钥(通常有一些 @ 987654324@). -
我应该在我原来的问题中指出,在我在服务器上使用的代码中,正确的 api 密钥已经到位。我已经使用返回预期结果的 cURL 命令对其进行了测试。
标签: json asp-classic xmlhttprequest sendgrid