经典ASP xmlhttp获取如何为sendgrid api

时间:2016-06-07 02:53:56

标签: json asp-classic xmlhttprequest sendgrid

我正在尝试通过他们的API从我的SendGrid帐户获取数据。我正在使用经典的ASP。我找到some code that works,但我需要按照in their documentation所述为SendGrids API添加授权。

我发现了一些似乎建议我需要在xmlhttp.open之后和xmlhttp.send之前添加xmlhttp.setRequestHeader的示例但是当我取消注释下面的行“xmlhttp.setRequestHeader”时,我得到500错误浏览器。现在有人能告诉我将授权部分添加到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

3 个答案:

答案 0 :(得分:2)

谢谢大家!信用证转到Kul-Tigin指出我的错误,这错误解释了评论&#34; HTTP / 1.1&#34;对于SendGrids示例中的部分网址。

当我改变时:

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.open "GET", "https://api.sendgrid.com/v3/campaigns?limit=10&offset=0", false
xmlhttp.setRequestHeader "Authorization", "Bearer my-correct-sendgrid-api-key"

它开始没有错误地工作。这是工作代码:

<!-- language: lang-js -->
<%@ Language=VBScript %>
<%
Set xmlhttp = CreateObject("Msxml2.ServerXMLHTTP.6.0")
xmlhttp.open "GET", "https://api.sendgrid.com/v3/campaigns?limit=10&offset=0", 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
%>

SearchAndResQ我将阅读您在错误捕获时提供的链接。谢谢!

答案 1 :(得分:1)

在评论中{{}}之后,问题似乎是这一行

xmlhttp.setRequestHeader "Authorization", "Bearer my-correct-sendgrid-api-key"

这是在IServerXMLHTTPRequest实例上设置HTTP授权标头的正确方法。

Bearer my-correct-sendgrid-api-key需要替换为您的实际API密钥,否则您可能会收到错误回复。

根据some discussion;

  

来自documentation
  您可以在帐户中生成 API密钥 - 访问How To Use The Web API v3 - Authentication。要使用密钥,您必须设置一个名为“Authorization”的纯文本标题,标题内容为“Bearer XXX”,其中XXX是您的API密钥。

答案 2 :(得分:1)

如果您无法访问错误日志,则可以使用On Error Resume Next捕获错误,并查看错误说明告诉您的内容。

<%@ Language=VBScript %>
<%
Set xmlhttp = CreateObject("Msxml2.ServerXMLHTTP.6.0")

xmlhttp.open "GET", "https://api.sendgrid.com/v3/campaigns?limit=10&offset=0", false
On Error Resume Next
xmlhttp.setRequestHeader "Authorization", "Bearer xx.xxxxx.xxxx"
If Err.Number<>0 Then
    Response.Write "Error:" & Err.Description & "<br>"
End If
On Error GoTo 0
xmlhttp.send ""
Response.AddHeader "Content-Type", "application/json;charset=UTF-8"
Response.Charset = "UTF-8"
pageReturn = xmlhttp.responseText

Set xmlhttp = Nothing 
response.write pageReturn
%>

请参阅:On Error Statement