Hey I've been trying for hours to receive a XML via a classic ASP page but it just wont work.
Here my code:
post.asp
url = "http://myurl.com/receive.asp"
information = "<Send><UserName>Colt</UserName><PassWord>Taylor</PassWord><Data>100</Data></Send>"
Set xmlhttp = server.Createobject("MSXML2.ServerXMLHTTP")
xmlhttp.Open "POST", url, false
xmlhttp.setRequestHeader "Content-Type", "text/xml"
xmlhttp.send information
receive.asp
Dim objXmlRequest
Set objXmlRequest = Server.CreateObject("MSXML2.DOMDOCUMENT.3.0")
objXmlRequest.async = False
objXmlRequest.setProperty "ServerHTTPRequest", True
objXmlRequest.validateOnParse = True
objXmlRequest.preserveWhiteSpace = True
IF objXmlRequest.Load (Request) THEN
'GET THE REQUEST FROM CLIENT
strQuery = "//" & "ActionName"
Set oNode = objXmlRequest.selectSingleNode(strQuery)
strActionName = oNode.Text
response.write("success")
ELSE
Response.Write "Failed to load XML file, reason: " & objXmlRequest.parseError.reason
END IF
This error appears:
Failed to load XML file, reason: XML document must have a top level element.
I just don't get it. Also i want to know if there is a posibilty to save the loaded XML?
Try this
Post.asp
<%
information = "<Send><UserName>Colt</UserName><PassWord>Taylor</PassWord><Data>100</Data></Send>"
Response.ContentType = "text/xml"
Response.Write information
Response.End
%>
Receive.asp
<%
'// URL from which to get the XML - it has to include the full URL, I think
Dim URL: URL = "http://localhost:8096//pages/test/post.asp"
response.write URL & "<br/>"
'// Request the XML from the post.asp page
Set xmlhttp = server.Createobject("MSXML2.ServerXMLHTTP")
xmlhttp.Open "GET", url, false
xmlhttp.send
'// Get the received XML object directly from the xmlhttp object
dim objXML: set objXML = xmlHttp.ResponseXML
response.write typename(objXML) & "<br/>"
'// Check that XML has been recieved
IF not objXML is Nothing THEN
'// Get the data from the xml
strQuery = "//UserName"
Set oNode = objXML.selectSingleNode(strQuery)
strUserName = oNode.Text
response.write "success - user = " & strUserName & "<br/>"
ELSE
Response.Write "Failed to load XML file"
END IF
%>
This is the result when you open the page "receive.asp" (in my case http://localhost:8096/pages/test/receive.asp )
http://localhost:8096/pages/test/post.asp
DOMDocument
success - user = Colt
OK, here is my alternative answer, this time the page that you request sends an XML string to another page, which loads it into an XML document and extracts data from the XML.
[EDIT] The technique you have used to send XML in your original post works fine, see the final version (post3.asp /receive3.asp) shown below.
In post2.asp / receive2.asp I have encoded the XML as a form field named XML, then loaded that field into the XML object at the receiving end. This works fine for relatively small XML files.
In this example, you have to request the post2.asp page:
post2.asp
<%
Response.write "Posting XML data to another page<br/>"
'// URL to which to send XML data
URL="http://localhost:8096/pages/test/receive2.asp"
'// The XML string to be sent
Dim Information: Information = "<Send><UserName>Colt</UserName><PassWord>Taylor</PassWord><Data>100</Data></Send>"
dim XMLHttp : SET XMLHttp = Server.CreateObject("MSXML2.ServerXMLHttp")
xmlhttp.Open "POST", url, false
xmlhttp.setRequestHeader "Content-type", "application/x-www-form-urlencoded"
'// URLEncode the XML into a form data string and send it
xmlhttp.send "xml=" & server.URLEncode( Information )
'// Get the response that is send by receive2.asp
dim sResponse: sResponse = xmlhttp.ResponseText
'// Show the response
Response.write "Response received from the called page:<hr/><span style='color:blue'>" & sResponse & "</span><hr/>"
%>
Receive2.asp
<%
'// Get the xml string from the request
xml = Request.form("xml")
'// Write the received XML as a displayable html string
response.write "[" & replace(replace(xml, "<", "<"), ">", ">") & "]<br/>"
'// Create the XML object to load the string
Dim objXml
Set objXml = Server.CreateObject("MSXML2.DOMDOCUMENT.3.0")
'// Try to load the xml string
if objXML.LoadXML(xml) THEN
'// Get the data from the xml
strQuery = "//UserName"
Set oNode = objXML.selectSingleNode(strQuery)
strUserName = oNode.Text
'// Success message
response.write "success - user = " & strUserName & "<br/>"
ELSE
'// Failed message
Response.Write "Failed to load XML file, reason: " & objXML.parseError.reason & "<br/>"
END IF
%>
This is the result you get when opening the post2.asp page
Posting XML data to another page
Response received from the called page:
_______________________________________________________
[<Send><UserName>Colt</UserName><PassWord>Taylor</PassWord><Data>100</Data></Send>]
success - user = Colt
_______________________________________________________
Here is the final version, this time using the XML content type. You have to open the page post3.asp:
Post3.asp
<%
'// URL to which to send XML data
URL="http://localhost:8096/pages/test/receive3.asp"
Response.Write "Sending XML data to " & URL & "<br/>"
information = "<Send><UserName>Colt</UserName><PassWord>Taylor</PassWord><Data>100</Data></Send>"
Set xmlhttp = server.Createobject("MSXML2.ServerXMLHTTP")
xmlhttp.Open "POST", url, false
xmlhttp.setRequestHeader "Content-Type", "text/xml"
xmlhttp.send information
'// Report the response from the called page
response.write "Response received:<hr/><span style='color:blue'>" & xmlhttp.ResponseText & "</span><hr/>"
%>
Receive3.asp
<%
Dim objXmlRequest
Set objXmlRequest = Server.CreateObject("MSXML2.DOMDOCUMENT.3.0")
IF objXmlRequest.Load (Request) THEN
'GET THE REQUEST FROM CLIENT
strQuery = "//UserName"
Set oNode = objXmlRequest.selectSingleNode(strQuery)
strActionName = oNode.Text
response.write "success! user name is " & strActionName
ELSE
Response.Write "Failed to load XML file, reason: " & objXmlRequest.parseError.reason
END IF
%>
and the result is:
Sending XML data to http://localhost:8096/pages/test/receive3.asp
Response received:
success! user name is Colt
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.