Another useful feature of the
WebRequest
class is its ability to read data
through a web proxy. A web proxy is a
server located on the network between your code and a web server. Its
job is to intercept all traffic headed for the web server and attempt
to fulfill as many requests as it can without contacting the web
server. If a web proxy cannot fulfill a request itself, it forwards
the request to the web server for processing.
Web proxies serve two primary purposes:
A proxy server can cache data locally to speed network performance. Rather than sending two identical requests from different clients to the same web resource, the results of the first request are saved, and sent back to any other clients requesting the same data. Typical web proxies have configurable parameters that control how long cached data is retained before new requests are sent on to the web server. The HTTP protocol can also specify this cache refresh period. Many large online services, such as America Online, use caching to improve their network performance.
A proxy server can be used to filter access to certain sites. Filtering is usually used by businesses to prevent employees from accessing web sites that have no business-related content, or by parents to prevent children from accessing web sites that may have material they believe is inappropriate. Filters can be as strict or loose as necessary, preventing access to entire IP subnets or to single URLs.
The .NET Framework provides the
WebProxy
class to help you incorporate the use of
web proxy servers into your application. WebProxy
is an implementation of IWebProxy
, and can only be
used to proxy HTTP and HTTPS (secure HTTP) requests.
It’s important that you know the type of URL you are
requesting data from: casting a FileWebRequest
to
an HttpWebRequest
will cause an
InvalidCastException
to be thrown.
To make use of a proxy server that is
already set up on your network, you first create the
WebRequest
just as before. You can then
instantiate a WebProxy
object, set the address of
the proxy server, and set the Proxy( )
property of
WebRequest
to link the proxy server to the web
server. The WebProxy
constructor has many
overloads for many different situations. In the following example,
I’m using a constructor that lets me specify that
the host name of the proxy server is http://proxy.mydomain.com
. Setting the
constructor’s second parameter,
BypassOnLocal
, to true
causes
local network requests to be sent directly to the destination,
circumventing the proxy server:
HttpWebRequest request = (HttpWebRequest) WebRequest.Create("http://www.oreilly.com/"); request.Proxy = new WebProxy("http://proxy.mydomain.com",true);
Any data that goes through WebRequest
to a
destination external to the local network will now use the proxy
server.
Why is this important? Imagine that you wish to read XML from an
external web page, but your network administrator has installed a web
proxy to speed general access and prevent access to some specific
sites. Although the XmlTextReader
has the ability
to read an XML file directly from a URL, it does not have the
built-in ability to access the web through a web proxy. Since
XmlTextReader
can read data from any
Stream
or TextReader
, you now
have the ability to access XML documents through the proxy. In the
next section, I’ll tell you more about the
XmlReader
class.
3.145.191.134