VBA 中 SOAP Web 服务请求的 HTTP 基本身份验证

问题描述 投票:0回答:1

我的请求未通过身份验证阶段。所以我试图找出在我的身份验证阶段或之前出了什么问题。

我知道我的密钥和密码有效,因为我可以使用其他代码访问 Web 服务,但在 VBA 中我无法访问。

我认为我的错误发生在我的请求标头中,所以如果您可以查看它们,如果您发现错误或丢失的内容,请告诉我。

我知道我的“Content-Type”标头对我来说应该是“text/xml”,并且我的身份验证应该采用基本 HTTP 身份验证表单。

我也有我的请求信封,我只是没有包含它,因为它是很多代码,并且没有必要包含我的问题。如果您确实想看它,请告诉我,我会附上它。

我在下面附上了发生错误的代码,以及对我的凭据进行编码以通过的函数,因此请让我知道您可能有的任何提示(敏感信息已更改为“*****”)。

Sub CreateShip()
    
    Dim request As New MSXML2.XMLHTTP60
    Dim sEnv As String
    Dim response As New MSXML2.DOMDocument60

    Dim key As String
    key = "*****"
    Dim pswd As String
    pswd = "*****"
    
     With request
        .Open "Get", "https://devwebservices.purolator.com/EWS/V2/shipping/Shippingservice.wsdl", False
        .setRequestHeader "Content-Type", "text/xml"
        .setRequestHeader "Authorization", "Basic " & EncBase64(key & ":" & pswd)
        ' Request Envelope 
        .send
    End with
End Sub

Function EncBase64(strData As String) As String

    Dim objXML As MSXML2.DOMDocument60
    Dim objNode As MSXML2.IXMLDOMElement
    Dim arData() As Byte
    arData = StrConv(strData, vbFromUnicode)
    Set objXML = New MSXML2.DOMDocument60
    Set objNode = objXML.createElement("b64")
    objNode.DataType = "bin.base64"
    objNode.nodeTypedValue = arData
    EncBase64 = objNode.Text
    Set objNode = Nothing
    Set objXML = Nothing
    'Debug.Print strData
    'Debug.Print EncBase64
    
End Function
vba dom soap
1个回答
0
投票

这是我看到的输出

.responseText
到工作表单元格的内容:

<!DOCTYPE html PUBLIC ""-//W3C//DTD XHTML 1.0 Strict//EN"" ""http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"">
<html xmlns=""http://www.w3.org/1999/xhtml"">
<head>
<meta http-equiv=""Content-Type"" content=""text/html; charset=iso-8859-1""/>
<title>405 - HTTP verb used to access this page is not allowed.</title>
<style type=""text/css"">
<!--
body{margin:0;font-size:.7em;font-family:Verdana, Arial, Helvetica, sans-serif;background:#EEEEEE;}
fieldset{padding:0 15px 10px 15px;} 
h1{font-size:2.4em;margin:0;color:#FFF;}
h2{font-size:1.7em;margin:0;color:#CC0000;} 
h3{font-size:1.2em;margin:10px 0 0 0;color:#000000;} 
#header{width:96%;margin:0 0 0 0;padding:6px 2% 6px 2%;font-family:""trebuchet MS"", Verdana, sans-serif;color:#FFF;
background-color:#555555;}
#content{margin:0 0 0 2%;position:relative;}
.content-container{background:#FFF;width:96%;margin-top:8px;padding:10px;position:relative;}
-->
</style>
</head>
<body>
<div id=""header""><h1>Server Error</h1></div>
<div id=""content"">
 <div class=""content-container""><fieldset>
  <h2>405 - HTTP verb used to access this page is not allowed.</h2>
  <h3>The page you are looking for cannot be displayed because an invalid method (HTTP verb) was used to attempt access.</h3>
 </fieldset></div>
</div>
</body>
</html>

API 文档位于登录后面,所以我看不到它们。

© www.soinside.com 2019 - 2024. All rights reserved.