msxml2.xmlhttp 송신 메소드는 조기 바인딩과 함께 작동하며 늦은 바인딩으로 실패합니다.
-
08-07-2019 - |
문제
아래 코드는 작동합니다. 그러나 내가 줄을 언급하면 Dim objRequest As MSXML2.XMLHTTP
그리고 줄을 타협합니다 Dim objRequest As Object
오류 메시지로 실패합니다.
파라미터가 잘못되었습니다
왜, 그리고 어떤 일이 있으면 무엇을 할 수 있습니까?
Public Function GetSessionId(strApiId, strUserName, strPassword) As String
Dim strPostData As String
Dim objRequest As MSXML2.XMLHTTP
'Dim objRequest As Object '
strPostData = "api_id=" & strApiId & "&user=" & strUserName & "&password=" & strPassword
Set objRequest = New MSXML2.XMLHTTP
With objRequest
.Open "POST", "https://api.clickatell.com/http/auth", False
.setRequestHeader "Content-Type", "application/x-www-form-urlencoded"
.send strPostData
GetSessionId = .responseText
End With
End Function
Corey, 예, MSXML 유형 라이브러리에 대한 참조없이 내 코드가 작동하기 위해서는 그렇게해야한다는 것을 알고 있습니다. 그것은 여기에 문제가되지 않습니다. 사용하면 코드가 실패합니다 Dim objRequest As Object
내가 사용하든 상관없이
Set objRequest = NEW MSXML2.XMLHTTP
참조와 함께
Set objRequest = CreateObject("MSXML2.XMLHTTP")
참조없이.
해결책
어떤 이유로 든 이것은 다음과 같습니다.
Dim strPostData As String
Dim objRequest As Object
strPostData = "api_id=" & strApiId & "&user=" & strUserName & "&password=" & strPassword
Set objRequest = New MSXML2.XMLHTTP
With objRequest
.Open "POST", "https://api.clickatell.com/http/auth", False
.setRequestHeader "Content-Type", "application/x-www-form-urlencoded"
.send (strPostData)
GetSessionId = .responseText
End With
URL 인코딩을 구축하는 대신 strPostData
문자열 연결을 통해 강하게 URL 인코딩 기능을 사용하는 것이 좋습니다.
strPostData = "api_id=" & URLEncode(strApiId) & _
"&user=" & URLEncode(strUserName) & _
"&password=" & URLEncode(strPassword)
a URLEncode()
VBA의 함수는이 스레드에 있습니다. Excel VBA에서 문자열을 인코딩하려면 어떻게해야합니까?
다른 팁
Dim ObjRequest를 Object로 사용하면 코딩해야합니다.
set objrequest = createobject ( "msxml2.xmlhttp")
나는 이것이 위의 Tomalek의 코드와 거의 동일하다는 것을 알고 있지만 (모든 크레딧으로 인해!),이 질문은 내가 가진 문제 (PHP 서버에 제출 한 다음 응답을 다루는 Excel)에 대한 완전한 해결책을 향해 도움이되었습니다. 따라서 이것이 다른 사람에게 도움이되는 경우 :
Sub Button1_Click2()
Dim objXMLSendDoc As Object
Set objXMLSendDoc = New MSXML2.DOMDocument
objXMLSendDoc.async = False
Dim myxml As String
myxml = "<?xml version='1.0'?><Request>Do Something</Request>"
If Not objXMLSendDoc.LoadXML(myxml) Then
Err.Raise objXMLSendDoc.parseError.ErrorCode, , objXMLSendDoc.parseError.reason
End If
Dim objRequest As MSXML2.XMLHTTP
Set objRequest = New MSXML2.XMLHTTP
With objRequest
.Open "POST", "http://localhost/SISADraftCalcs/Test2.php", False
.setRequestHeader "Content-Type", "application/xml;charset=UTF-16"
.setRequestHeader "Cache-Control", "no-cache"
.send objXMLSendDoc
End With
Dim objXMLDoc As MSXML2.DOMDocument
Set objXMLDoc = objRequest.responseXML
If objXMLDoc.XML = "" Then
objXMLDoc.LoadXML objRequest.responseText
If objXMLDoc.parseError.ErrorCode <> 0 Then
MsgBox objXMLDoc.parseError.reason
End If
End If
Dim rootNode As IXMLDOMElement
Set rootNode = objXMLDoc.DocumentElement
MsgBox rootNode.SelectNodes("text").Item(0).text
End Sub