I am using the below script to get a response from a basic authenticated SOAP web service.Below code is putting credentials in HTTP header and as a result of which I am not getting the response.
How do I update credentials in SOAP header using VBScript?
My code:
Set objHTTP = CreateObject("Msxml2.ServerXMLHTTP")
objHTTP.setOption 2, 13056
strTextContent = Trim("Content of my request xml")
strUserName = "mylogin"
strPassword = "mypassword"
strURL = "myendpoint"
objHTTP.Open "GET", strURL, False, strUserName, strPassword
objHTTP.setRequestHeader "Authorization", "Basic " & Base64Encode(strUserName & ":" & strPassword)
objHTTP.setRequestHeader "Content-Type", "text/xml; charset=utf-8"
objHTTP.setRequestHeader "SOAPAction", "mysoapaction"
objHTTP.send strTextContent
strResponseReceived = objHTTP.responseText
MsgBox strResponseReceived
Related
Please, someone can show me an example about how to download an MTOM attachment and save it to disk using VB6?
At the moment I am able to get a response from my ws, using this code:
Dim objDom As Object
Dim objXmlHttp As Object
Dim strRet As String
Dim intPos1 As Integer
Dim intPos2 As Integer
On Error GoTo Err_PW
' Create objects to DOMDocument and XMLHTTP
Set objDom = CreateObject("MSXML2.DOMDocument")
Set objXmlHttp = CreateObject("MSXML2.XMLHTTP")
'Set objXmlHttp = New MSXML2.XMLHTTP40
' Load XML
objDom.async = False
objDom.loadXML XmlBody
' Open the webservice
objXmlHttp.Open "POST", AsmxUrl, False
' Create headings
objXmlHttp.setRequestHeader "Content-Type", "text/xml; charset=utf-8"
objXmlHttp.setRequestHeader "SOAPAction", SoapActionUrl
' Send XML command
objXmlHttp.Send (objDom.xml)
' Get all response text from webservice
strRet = objXmlHttp.responseText
But from this point I don't know how to proceed to grab the MTOM attachment.
This is what return from ws:
--uuid:0b9372cf-63bb-484f-87f3-7bedfaa776fb
Content-Id: <rootpart*0b9372cf-63bb-484f-87f3-7bedfaa776fb#example.jaxws.sun.com>
Content-Type: application/xop+xml;charset=utf-8;type="text/xml"
Content-Transfer-Encoding: binary
<?xml version='1.0' encoding='UTF-8'?>
<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
<S:Body><ns2:getContentStreamResponse xmlns:ns2="http://docs.oasis-open.org/ns/cmis/messaging/200908/" xmlns="http://docs.oasis-open.org/ns/cmis/core/200908/">
<ns2:contentStream>
<ns2:length>2572861</ns2:length>
<ns2:mimeType>application/vnd.openxmlformats-officedocument.wordprocessingml.document</ns2:mimeType>
<ns2:filename>SF-MASTER - SDTC.docx</ns2:filename>
<ns2:stream>
<xop:Include xmlns:xop="http://www.w3.org/2004/08/xop/include" href="cid:4b7c8c60-fc9e-4da8-92fc-aa8c2fdfb401#example.jaxws.sun.com"/></ns2:stream>
</ns2:contentStream>
</ns2:getContentStreamResponse>
</S:Body>
</S:Envelope>
--uuid:0b9372cf-63bb-484f-87f3-7bedfaa776fb
Content-Id: <4b7c8c60-fc9e-4da8-92fc-aa8c2fdfb401#example.jaxws.sun.com>
Content-Type: application/vnd.openxmlformats-officedocument.wordprocessingml.document
Content-Transfer-Encoding: binary
PK
31/05/2018 10:04:06: UUID documento: 0b9372cf-63bb-484f-87f3-7bedfaa776fb
31/05/2018 10:04:06: Tag finale: --uuid:0b9372cf-63bb-484f-87f3-7bedfaa776fb--
31/05/2018 10:04:06: lunghezza documento: 2572861
Thank you very much
Use this as a guide and modify your code to save the returned file data as a binary file.
Add to top of function
Const adTypeBinary = 1
Const adSaveCreateOverWrite = 2
Dim varByteArray, ado
Dim strFile as String
After you send the request insert this code
If objXmlHttp.Status <> "200" Then
Exit Function
End If
' Pull this from returned header data
strFile = "SF-MASTER - SDTC.docx"
' get file contents
varByteArray = objXmlHttp.ResponseBody
Set objXmlHttp= Nothing
'Now save the binary file
On Error Resume Next
Set ado = Nothing
Set ado = CreateObject("ADODB.Stream")
ado.Type = adTypeBinary
ado.Open
ado.Write varByteArray
ado.SaveToFile strFile, adSaveCreateOverWrite
ado.Close
I have a classic asp file that needs to connect to a web service.
I am confused as to how to define the URL for the web service and the Namespace in the SOAPAction.
When I run my code and write a Response.Write for the return value of the method that I am calling in the web service, it either returns the wsdl or the web page for the service
This code displays the web service html as if you are entering the web service .svc url:
Dim strSoapReq
strSoapReq = "<?xml version=""1.0"" encoding=""utf-8"" ?>"
strSoapReq = strSoapReq & "<s:Envelope xmlns:s=""http://schemas.xmlsoap.org/soap/envelope/"">"
strSoapReq = strSoapReq & "<s:Body>"
strSoapReq = strSoapReq & "<TestMethod xmlns=""http:<serverName:<port>/PagingService/PagingService"">"
strSoapReq = strSoapReq & "</TestMethod>"
strSoapReq = strSoapReq & "</s:Body>"
strSoapReq = strSoapReq & "</s:Envelope>"
'Create server-side component to make requests
Set httpRequest = Server.CreateObject("MSXML2.ServerXMLHTTP.6.0")
URL = "http:<serverName:<port>/PagingService/PagingService.Paging.svc"
httpRequest.Open "GET", URL, False
httpRequest.setRequestHeader "Content-Type", "text/xml; charset=utf-8"
httpRequest.setRequestHeader "SOAPAction", URL & "/TestMethod"
httpRequest.Send(strSoapReq)
Dim strResult
strResult = httpRequest.responseText
Response.Write(vbCrLf & "Result from web service call: " & vbCrLf & strResult)
If I add the ?wsdl to the end of the service url, it shows the WSDL.
How can I call the method in the web service?
UPDATE
I changed my code to the following:
Dim NS, NS_SOAP, NS_SOAPENC, NS_XSI, NS_XSD
NS = "http://<server>/PagingService/"
NS_SOAP = "http://schemas.xmlsoap.org/soap/envelope/"
NS_SOAPENC = "http://schemas.xmlsoap.org/soap/encoding"
NS_XSI = "http://www.w3.org/2001/XMLSchema-instance"
NS_XSD = "http://www.w3.org/2001/XMLSchema"
Set httpRequest = Server.CreateObject("MSXML2.ServerXMLHTTP.6.0")
URL = "http://<server>/PagingService/PagingService.Paging.svc?WSDL"
httpRequest.Open "POST", URL, False
httpRequest.setRequestHeader "Content-Type", "text/xml; charset=utf-8"
httpRequest.setRequestHeader "SOAPAction", "http://<server>/PagingService/TestMethod"
' XML DOM objects.
Dim DOM, Envelope, Body, Operation, Param
' Creates an XML DOM object.
Set DOM = CreateObject("MSXML2.DOMDocument.6.0")
' Creates the main elements.
Set Envelope = DOM.createNode(1, "soap:Envelope", NS_SOAP)
Envelope.setAttribute "xmlns:soapenc", NS_SOAPENC
Envelope.setAttribute "xmlns:xsi", NS_XSI
Envelope.setAttribute "xmlns:xsd", NS_XSD
DOM.appendChild Envelope
Set Body = DOM.createElement("soap:Body")
Envelope.appendChild Body
' Creates an element for the TestMethod function.
Set Operation = DOM.createNode(1, "TestMethod", NS)
Body.appendChild Operation
' Releases the objects.
Set Operation = Nothing
Set Body = Nothing
Set Envelope = Nothing
httpRequest.Send(DOM.xml)
Dim strResult
strResult = httpRequest.status
Response.Write(vbCrLf & "Result from web service call: " & vbCrLf & strResult)
The http.Status result with this code is: 415 - unsupported media
I saw a post with this error and they corrected it by changing the Content-Type. When I tried this:
httpRequest.setRequestHeader "Content-Type", "application/soap+xml; charset=utf-8"
I got the status value of 400 - Bad request.
Finally figured this one out. Below is my code in case some poor minion needs to do this...maybe it will lessen the pain and shorten the time to get it to run.
I connected a WCF web service (file extension, .svc) to a classic .asp file.
I had to add a basicHttpBinding to the web service. It can also be secure (HTTPS).
This is the binding added to the service config. file:
(Note the name of it. defined by address attribute.
<endpoint address="basic" binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_IPaging" contract="PagingService.IPaging">
</endpoint>
Added this to the bindings part of the config file:
<basicHttpBinding>
<binding name="BasicHttpBinding_IPaging"></binding>
</basicHttpBinding>
You need to recompile the project so the WSDL has this binding in its definition.
Now the fun part....classic asp :( written in VBScript.
The SOAP envelope gave me the most trouble:
'Namespaces
Dim NS, NS_SOAP, NS_SOAPENC, NS_XSI, NS_XSD, NS_SOAP_ACTION
'NS is the name of YOUR namespace. If you did not define it
'in the service interface it is probably the same as this
NS = "http://tempuri.org/"
'It is for SOAP 1.1 - my version of .asp could only use SOAP 1.1
NS_SOAP = "http://schemas.xmlsoap.org/soap/envelope/"
'Next 3 definitions are standard - just copy
NS_SOAPENC = "http://schemas.xmlsoap.org/soap/encoding"
NS_XSI = "http://www.w3.org/2001/XMLSchema-instance"
NS_XSD = "http://www.w3.org/2001/XMLSchema"
'This should also be in your WSDL. Look up the method you
'want to call; there was an attribute in mine that read 'soap_action'
NS_SOAP_ACTION = "http://tempuri.org/IFileName/<YourMethodName>"
'URL to the WCF service Using basicHttpBinding identified to the name
'you defined in the config file in 'address' attribute
URL = "https://<serverName>:<port>/ServiceFolder/Service.Paging.svc/basic"
'This was the hard part for me. Defining the damn soap message
'XML DOM objects.
Dim Envelope, Body, Operation
Dim ParamUserID, ParamUserName,
'Creates an XML DOM object.
Set objXmlDoc = CreateObject("MSXML2.DOMDocument.6.0")
objXmlDoc.async = false
'Creates the main elements.
Set Envelope = objXmlDoc.createNode(1, "soap:Envelope", NS_SOAP)
Envelope.setAttribute "xmlns:soapenc", NS_SOAPENC
Envelope.setAttribute "xmlns:xsi", NS_XSI
Envelope.setAttribute "xmlns:xsd", NS_XSD
objXmlDoc.appendChild Envelope
Set Body = objXmlDoc.createNode(1, "Body", NS_SOAP)
Envelope.appendChild Body
'Creates an element for the SendPageForGalvanonSystem function.
Set Operation = objXmlDoc.createNode(1, "<MethodName>", NS)
Body.appendChild Operation
'Add all the parameters to the DOM
Set ParamUserID = objXmlDoc.createNode(1, "strUserID", NS)
ParamUserID.text = strUserID
Operation.appendChild ParamUserID
Set ParamUserName = objXmlDoc.createNode(1, "strUserName", NS)
ParamUserName.text = strUserName
Operation.appendChild ParamUserName
Set httpRequest = Server.CreateObject("MSXML2.ServerXMLHTTP.6.0")
httpRequest.Open "POST", URL, False
httpRequest.setRequestHeader "Content-Type", "text/xml"
httpRequest.setRequestHeader "SOAPAction", NS_SOAP_ACTION
httpRequest.send objXmlDoc.xml
'Releases the objects.
Set ParamUserID = Nothing
Set ParamUserName = Nothing
Set Operation = Nothing
Set Body = Nothing
Set Envelope = Nothing
I have to call a REST service from VB6. I followed this post
Get/post to RESTful web service but doesnt able to achieve much.
What I have done so far is :
Dim sUrl As String
Dim response As String
Dim xmlhttp
sUrl = "myserviceurl"
xmlhttp = CreateObject("MSXML2.xmlhttp")
xmlhttp.open "GET", sUrl, False
xmlhttp.setRequestHeader "Content-Type", "application/x-www-form-urlencoded"
Set xmlhttp = Nothing
Have added MSXML6 to my project references.
I get this error :
Object doesnt support this Method..
Try below code
Dim xmlhttp As MSXML2.XMLHTTP
Set xmlhttp = New MSXML2.XMLHTTP
i am beginner in coding.
I have to call a web service below:
http://www.w3schools.com/webservices/tempconvert.asmx?op=CelsiusToFahrenheit
enter a value like 25 and click Invoke returns you the temperature in Fahrenheit.
For that i used below code:
url = "http://www.w3schools.com/webservices/tempconvert.asmx?op=CelsiusToFahrenheit&Celsius=25"
'Set oHttpReq = CreateObject("Microsoft.XMLHTTP") 'when i use XMLHTTP i am getting error saying "The download of the specified resource has failed."
Set oHttpReq = CreateObject("MSXML2.ServerXMLHTTP") 'If i use it, the response contains Root Element missing
oHttpReq.open "POST", url, False
oHttpReq.send
'Response
responseText = oHttpReq.responseText
WScript.echo responseText
Can anyone help me?
Create at file.vbs (visual basic script)
Compile with external tool to exe
In server task set this.
Const HOST = Sample service in IIS
Const URL = "wsPage.asmx"
Set xmlhttp = CreateObject("Microsoft.XMLHTTP")
xmlhttp.open "POST", HOST & URL & "/wsServiceTest", false
'Set the Content-Type header to the specified value
xmlhttp.setRequestHeader "Content-Type", "application/x-www-form-urlencoded"
' Send the request synchronously
xmlhttp.send ""
WScript.Echo "Load ok..."
I'm trying to get a response from a ASP.NET webservice without using the get parameters. I have the following code.
strBarcode = "ABC123
strURL ="http://serverName/BarcodeGenerator.asmx"
Set xmlReq = Server.CreateObject("Msxml2.DOMDocument.3.0")
Set xmlResp = Server.CreateObject("Msxml2.DOMDocument.3.0")
Set httpReq = Server.CreateObject("MSXML2.ServerXMLHTTP")
xmlReq.async = false
strXML = CStr(CreateRequest(strBarcode ))
xmlReq.loadXML(CStr(strXML))
//Open, async
httpReq.open "POST", CStr(strURL), true
httpReq.setRequestHeader "Host", "serverName"
httpReq.setRequestHeader "Content-Type", "text/xml; charset=utf-8"
httpReq.setRequestHeader "SOAPAction", "http://tempuri.org/GetBarcode"
httpReq.send(xmlReq)
strDone = "0"
bTimeout = false
dStart = Now()
dEnd = Now()
lCounter = 0
lCounterPrev = -1
intStatus = 0
Do while intStatus <> 4 and (Not bTimeout)
dEnd = Now()
lCounter = DateDiff("s",dStart,dEnd)
if lCounter > 30 then bTimeout = True
%>. <%
'Wait a second
httpReq.waitForResponse 1000
intStatus = httpReq.readyState
Loop
If httpReq.readyState = 4 Then
bTimeout = false
Set xmlResp = httpReq.responseXML
%>
Status: <%=httpReq.statusText%><BR>
Response: <%=httpReq.responseText%> <BR><BR>
<%
Set nodes = xmlResp.getElementsByTagName("GetBarcodeResult")
If (nodes is nothing) THen
%>Nodes is NULL<BR><%
Else
%>Number of Nodes: <%=nodes.length%><%
End IF
Set node = nodes(0)
url = node.nodeValue
End If
The status is
Status: Bad Request
and the response is
Response: Bad Request (Invalid Hostname)
What am I doing wrong?
Your code is attempting to set the Host header itself. You should not be doing this.
ServerXMLHTTP will do this for you drawing the host string from the URL provided. By attempting to add it yourself you are corrupting an important criteria for the HTTP protocol. Host is the most fundemental header in the 1.1 protocol, it is the only header that must be present in a 1.1 request.
I'm not sure why you are using an asynchronous request and WaitForResponse just to detect a timeout. Why not use the setTimeouts method and a synchronous request?
This article (now via web.archive.org for posterity) explains it best, but basically, due to IIS configuration the server was unable to locate itself (the classic-asp and webservice were hosted on the same server). There are no problems with the code.