经典的asp使用addheader调用api进行授权 [英] classic asp calling an api using addheader for authorization
问题描述
我有一个页面,该页面调用在测试模式下不需要任何授权的api.
我们现在正在迁移到需要用户名和密码的实时环境.
I have a page that calls an api that in test mode has not required any authorization.
We are now moving to a live environment where a username and password will be required.
api提供程序已发送以下消息:
The api provider has sent the following message:
要访问这些服务,请通过添加以下HTTP标头发送请求.授权:基本Base64Encode(用户名:密码")
To access these services please send the requests by adding following HTTP header. Authorization: Basic Base64Encode("username: password")
我不确定语法是否正确,想知道是否有人可以帮助我.
I'm not sure of the correct syntax and wondered if someone could help me out.
最初的呼叫(并且运行良好)是:
The original call (and working perfectly) is:
Dim xmlobj, username, password
username="myusername"
password="mypassword"
Set xmlobj = server.CreateObject("MSXML2.DOMDocument.3.0")
xmlobj.async = false
xmlobj.setProperty "ServerHTTPRequest", True
xmlObj.AddHeader "Authorization", "Basic", Base64Encode(username & ":" & password)
xmlobj.load(sUrl)
上面的代码抛出错误
/api-test.asp |20|800a000d|Type_mismatch:_'Base64Encode'
任何帮助将不胜感激.
推荐答案
Like I've mentioned in the comments, the syntax for the Authorization
header is incorrect.
API示例不期望"Base64Encode('username','password')"
这是API提供的示例,向您展示如何获取字符串"username:password"
和Base64对其进行编码,这正是 Authorization
标头所期望的.
The API example doesn't expect "Base64Encode('username','password')"
this is an example supplied by the API to show you how to take the string "username:password"
and Base64 encode it which is what the Authorization
header is expecting.
但是您仍然需要具有 Base64Encode()
函数定义,代码才能正常工作.
But you still need to have the Base64Encode()
function definition for the code to work.
Base64Encode()
和MyASC()
函数取自 Base64编码VBS功能(vb编码器算法),源代码
类似的事情应该起作用;
Something like this should work;
<%
Function Base64Encode(inData)
'rfc1521
'2001 Antonin Foller, Motobit Software, http://Motobit.cz
Const Base64 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"
Dim cOut, sOut, I
'For each group of 3 bytes
For I = 1 To Len(inData) Step 3
Dim nGroup, pOut, sGroup
'Create one long from this 3 bytes.
nGroup = &H10000 * Asc(Mid(inData, I, 1)) + _
&H100 * MyASC(Mid(inData, I + 1, 1)) + MyASC(Mid(inData, I + 2, 1))
'Oct splits the long To 8 groups with 3 bits
nGroup = Oct(nGroup)
'Add leading zeros
nGroup = String(8 - Len(nGroup), "0") & nGroup
'Convert To base64
pOut = Mid(Base64, CLng("&o" & Mid(nGroup, 1, 2)) + 1, 1) + _
Mid(Base64, CLng("&o" & Mid(nGroup, 3, 2)) + 1, 1) + _
Mid(Base64, CLng("&o" & Mid(nGroup, 5, 2)) + 1, 1) + _
Mid(Base64, CLng("&o" & Mid(nGroup, 7, 2)) + 1, 1)
'Add the part To OutPut string
sOut = sOut + pOut
'Add a new line For Each 76 chars In dest (76*3/4 = 57)
'If (I + 2) Mod 57 = 0 Then sOut = sOut + vbCrLf
Next
Select Case Len(inData) Mod 3
Case 1: '8 bit final
sOut = Left(sOut, Len(sOut) - 2) + "=="
Case 2: '16 bit final
sOut = Left(sOut, Len(sOut) - 1) + "="
End Select
Base64Encode = sOut
End Function
Function MyASC(OneChar)
If OneChar = "" Then MyASC = 0 Else MyASC = Asc(OneChar)
End Function
Dim xmlobj, username, password
username="myusername"
password="mypassword"
Set xmlobj = server.CreateObject("MSXML2.XMLHTTP.3.0")
xmlobj.Open "GET", sUrl, False
xmlobj.setRequestHeader "Authorization", "Basic " & Base64Encode(username & ":" & password)
xmlobj.Send
Dim xmldoc
If xmlobj.status = 200 Then
Set xmldoc = Server.CreateObject("MSXML2.DOMDocument.3.0")
xmldoc.Load xmlobj.ResponseXML
Else
Response.Write "An error occurred!"
End If
%>
这篇关于经典的asp使用addheader调用api进行授权的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!