[导入]如何使用 Visual C# 生成 GET 请求

请求网页

以编程方式检索网页的功能具有多种用途。通过 Internet 传输控件或者通过直接对 WinInet API 编码,Microsoft Visual Basic 6.0 编程人员可以获得此功能。

在 .NET 中,System.Net 命名空间提供 WebRequest 类以封装对 Internet 资源的请求,并提供 WebResponse 类表示返回的数据。

可以使用这些对象获取表示对某个特定请求的响应的流。获取流后,即可读取响应,其读取方式与读取本地文本文件或其他任何源的方式相同。

要生成 GET 请求,请按照下列步骤操作:
1. 启动 Visual Studio 2005 或 Visual Studio .NET。
2. 在 Visual C# 中创建一个新的控制台应用程序。Visual Studio 会自动创建一个公共类和一个空的 Main 方法。
3. 确保项目至少引用了 System.dll
4. SystemSystem.NETSystem.IO(用于流对象)命名空间使用 using 指令,这样以后就无需在代码中限定这些命名空间中的声明。这些语句必须位于任何其他声明之前。
using System;
using System.Net;
using System.IO;
5. 在本示例中,将 URL 硬编码为一个变量。在实际的系统中,您可能要接收该值作为函数的参数,或者作为控制台应用程序的命令行参数。
string sURL;
sURL = "http://www.microsoft.com";
6. 创建一个新的 WebRequest 对象。只能通过 WebRequest 类(“New WebRequest”无效)的静态 Create 方法执行此操作。将目标 URL 作为对 Create 发出的调用的一部分提供,来初始化具有此值的对象。
WebRequest wrGETURL;
wrGETURL = WebRequest.Create(sURL);
7. 如果要请求本地网络之外的 URL,并且您位于代理之后,则必须创建一个 WebProxy 对象,然后将其提供给 WebRequest 对象。WebProxy 对象具有多种属性(下面的代码示例未设置这些属性);通过这些属性,可以指定可通过 Microsoft Internet Explorer 中的代理设置指定的基本信息。
WebProxy myProxy = new WebProxy("myproxy",80);
myProxy.BypassProxyOnLocal = true;

wrGETURL.Proxy = myProxy;
8. 如果要使用 Internet Explorer 中已配置的设置,可通过 WebProxy 类的 GetDefaultProxy 静态方法来实现此目的。
wrGETURL.Proxy = WebProxy.GetDefaultProxy();
注意:在 Visual Studio 2005 中,GetDefaultProxy 方法可正常使用。但是目前已经不推荐使用该方法。有关 Microsoft .NET Framework 2.0 中 GetDefaultProxy 方法的更多信息,请访问以下 Microsoft Developer Network (MSDN) 网站:
http://msdn.microsoft.com/netframework/programming/obsoleteapi/ObsByAssembly.aspx (http://msdn.microsoft.com/netframework/programming/obsoleteapi/ObsByAssembly.aspx)
9. 通过设置目标 URL 并使用适当的代理信息生成请求后,即可使用该请求获取一个与请求响应相对应的 Stream 对象。
Stream objStream;
objStream = wrGETURL.GetResponse().GetResponseStream();
10. 获取响应流后,即可像使用其他流一样使用该流,并可逐行甚至一次全部读取其中的内容。下面的代码示例一次一行循环读取流内容,将各行输出到控制台,直到 ReadLine 方法后返回 null 为止。
StreamReader objReader = new StreamReader(objStream);

string sLine = "";
int i = 0;

while (sLine!=null)
{
	i++;
	sLine = objReader.ReadLine();
	if (sLine!=null)
		Console.WriteLine("{0}:{1}",i,sLine);
}
Console.ReadLine();
11. 保存后运行程序。确保为所处环境正确配置了代理信息(参见第 5 步和第 6 步)。此时,就会在控制台中看到带有行号的 HTML 内容输出。

 

完整代码列表

using System;
using System.Net;
using System.IO;

namespace MakeAGETRequest_charp
{
	/// <summary>
	/// Summary description for Class1.
	/// </summary>
	class Class1
	{
		static void Main(string[] args)
		{
			string sURL;
			sURL = "http://www.microsoft.com";

			WebRequest wrGETURL;
			wrGETURL = WebRequest.Create(sURL);
			
			WebProxy myProxy = new WebProxy("myproxy",80);
			myProxy.BypassProxyOnLocal = true;

	        wrGETURL.Proxy = WebProxy.GetDefaultProxy();

			Stream objStream;
			objStream = wrGETURL.GetResponse().GetResponseStream();

			StreamReader objReader = new StreamReader(objStream);

			string sLine = "";
			int i = 0;

			while (sLine!=null)
			{
				i++;
				sLine = objReader.ReadLine();
				if (sLine!=null)
					Console.WriteLine("{0}:{1}",i,sLine);
			}
			Console.ReadLine();
		}
	}
}

 


文章来源:http://www.mscenter.edu.cn/blog/hongweiqu/archive/2007/05/24/150862.html
posted @ 2007-05-24 08:42  hihongwei  阅读(341)  评论(0编辑  收藏  举报