我正在尝试通过他们的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
答案 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密钥,否则您可能会收到错误回复。
来自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
%>