我的请求未通过身份验证阶段。所以我试图找出在我的身份验证阶段或之前出了什么问题。
我知道我的密钥和密码有效,因为我可以使用其他代码访问 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
这是我看到的输出
.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 文档位于登录后面,所以我看不到它们。