Published: Wednesday, November 01, 2000
Using Microsoft's XMLHTTP Object to Get Data From Other Web Pages
By Richard Lowe
There are several popular commercial COM components that retrieve data from other web sites via HTTP
requests, such as AspTear and
AspHTTP. There is another lesser know option
from Microsoft, however. Microsoft's suite of XML DOM (Document Object Model) components includes the
XMLHTTP object. This object was originally designed to provide client-side access to XML documents on
remote servers through the HTTP protocol. It exposes a simple API which allows you to send requests
(yes, even POSTS) and get the resultant XML, HTML or binary data!
(There is one side note at the time of this writing: Microsoft's MSXML 3.0 has just been
released. It contains a server-side specific version of the XMLHTTP component for use in web or application
servers. Therefore, unless you download v3.0
you are going to have to use the original version, which shouldn't be a problem for most applications.)
Getting Started
If you've been keeping up with versions of Internet Explorer, you probably have some version of MSXML
installed. If you need to install it, you can either install the latest version of MDAC
or the MSXML component itself. If you don't have it
installed, you may get the error: Invalid ProgID when you execute
Server.CreateObject("Microsoft.XMLHTTP").
The most basic function of XMLHTTP is simply returning the entire text of a web page, here is the syntax:
<%
Response.Buffer = True
Dim objXMLHTTP, xml
' Create an xmlhttp object:
Set xml = Server.CreateObject("Microsoft.XMLHTTP")
' Or, for version 3.0 of XMLHTTP, use:
' Set xml = Server.CreateObject("MSXML2.ServerXMLHTTP")
' Opens the connection to the remote server.
xml.Open "GET", "http://www.4Guysfromrolla.com/", False
' Actually Sends the request and returns the data:
xml.Send
'Display the HTML both as HTML and as text
Response.Write "<h1>The HTML text</h1><xmp>"
Response.Write xml.responseText
Response.Write "</xmp><p><hr><p><h1>The HTML Output</h1>"
Response.Write xml.responseText
Set xml = Nothing
%>
|
[
View the live demo!]
This code will write the entire 4GuysFromRolla.com default page to the browser that requests
it. The responseText property contains a the entire text of the page returned as a string.
Getting Binary Data
It's extremely simple to return binary data using the XMLHTTP object, the syntax is exactly the same, but you
return the respondsBody property, which is an array of unsigned bytes:
<%
Response.Buffer = True
Dim objXMLHTTP, xml
Set xml = Server.CreateObject("Microsoft.XMLHTTP")
xml.Open "GET", _
"http://www.4guysfromrolla.com/webtech/code/mitchell-pres.zip", _
False
xml.Send
' Add a header to give it a file name:
Response.AddHeader "Content-Disposition", _
"attachment;filename=mitchell-pres.zip"
' Specify the content type to tell the browser what to do:
Response.ContentType = "application/zip"
' Binarywrite the bytes to the browser
Response.BinaryWrite xml.responseBody
Set xml = Nothing
%>
|
[
View the live demo!]
We'll continue our investigation of XMLHTTP's capabilities in Part 2
of this article!
Read Part 2!