经典的asp使用addheader调用api进行授权 [英] classic asp calling an api using addheader for authorization

查看:80
本文介绍了经典的asp使用addheader调用api进行授权的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个页面,该页面调用在测试模式下不需要任何授权的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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆