• 9385阅读
  • 0回复

【转载】用C#.net请求Web网页 [复制链接]

上一主题 下一主题
离线XChinux
 

只看楼主 倒序阅读 楼主  发表于: 2005-07-23
请求 Web 页面(引自:http://support.microsoft.com/?scid=kb;zh-cn;307023&spid=1108&sid=global)

以编程方式实现的检索 Web 页功能具有多种用途。 Microsoft Visual Basic 6.0 编程人员可通过 Internet Transfer 控件或直接使用 WinInet 应用程序编程接口 (API) 实现该功能。 在 .NET 中,System.Net 名称空间提供了 WebRequest 类以封装对 Internet 资源的请求,以及提供 WebResponse 类表示返回的数据。 可以使用这些对象获取表示某个请求响应的数据流。 有了数据流之后,读取响应的操作与读取本地文件或其他资源的方式完全相同。

若要进行 GET 请求,请按照下列步骤操作:
1.     打开 Visual Studio .NET
2.     在 Microsoft C# 中新建控制台应用程序。Visual C# .NET 为您创建一个公用类,以及一个空的 Main() 方法。
3.     请确保项目至少引用了 System.dll。
4.     对 System、System.NET 和 System.IO(用于流对象)名称空间使用 using 指令,这样,在后面的代码中就不需要限定这些名称空间中的声明了。这些语句必须放在所有其他声明之前。

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

5.     本例中,直接将统一资源定位器 (URL) 硬编码为一个变量。 在实际的系统中,您可能要将该值作为函数的参数,或者作为控制台应用程序的命令行参数。

string sURL;
sURL = "http://www.microsoft.com";

6.     新建一个 WebRequest 对象,这只能通过使用 WebRequest 类的静态 Create 方法来实现(“New WebRequest”无效)。 作为对 Create 调用的一部分提供目标 URL,以使用该值初始化此对象。

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();

9.     在使用目标 URL 以及任何相应的代理信息设置完请求后,可以使用该请求获取一个与请求响应对应的 Stream 对象。

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

10.     获取响应数据流之后,可以将它像任何其他数据流(如打开文本文件)一样处理,并逐行或甚至一次全部读取其内容。 以下循环语句逐行读取数据流,直至 ReadLine 方法返回空值,并将各行输出到控制台。

StreamReader objReader = new StreamReader(objStream);

string sLine = "";
int i = 0;

while (sLine!=null)
{
    i++;
    sLine = objReader.ReadLine();
    if (sLine!=null)
        Console.WriteLine("Console.ReadLine();

11.     保存并运行代码,确保给您的环境正确配置了代理信息(步骤 7 和 8)。 此时,就会在控制台中看到带有行号的 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("Console.ReadLine();
        }
    }
}
[ 此贴被XChinux在2005-08-13 09:14重新编辑 ]
二笔 openSUSE Vim N9 BB10 XChinux@163.com 网易博客 腾讯微博
承接C++/Qt、Qt UI界面、PHP及预算报销系统开发业务
快速回复
限100 字节
 
上一个 下一个