checkurl是否存在(用C# 的HttpWebRequest和HttpWebResponse方法)

上一篇 / 下一篇  2010-08-31 15:14:19 / 个人分类:C#学习

用C# 的HttpWebRequest和HttpWebResponse方法checkurl是否存在

例如1:check  http://www.baidu.com/

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net;
using System.IO;
using System.Threading;

namespace checkurl
{
    class Program
    {

        static void Main(string[] args)
        {
            try
            {
                String url = "http://www.baidu.com/";
                //HttpWebRequest实例不使用HttpWebRequest的构造函数来创建,而是使用WebRequest的Create方法来创建.
                //创建一个HttpWebRequest对象
                HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
                request.Method = "GET";
               //不维持与服务器的请求状态
                request.KeepAlive = false;
                request.UserAgent = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 6.0; SLCC1; .NET CLR 2.0.50727; Media Center PC 5.0; .NET CLR 3.0.04506; InfoPath.2; .NET CLR 3.5.21022; CIBA)";
                request.Timeout = 6000;
                //创建一个HttpWebResponse对象
                HttpWebResponse response = (HttpWebResponse)request.GetResponse();
                //判断响应的url是否正确
                if (response.ResponseUri.ToString() == url)
                {
                    System.Console.WriteLine("请求成功");
                }
                else
                {
                    System.Console.WriteLine("请求失败");
                }
                System.Console.ReadLine();
            }
            catch (Exception ex)
            {
                System.Console.WriteLine(ex.Message);

            }
    
        }
}

HttpWebRequest和HttpWebResponse介绍
一:HttpWebRequest和HttpWebResponse类是用于发送和接收HTTP数据的最好选择。它们支持一系列有用的属性。这两个类位于System.Net命名空间,默认情况下这个类对于控制台程序来说是可访问的。请注意,HttpWebRequest对象不是利用new关键字通过构造函数来创建的,而是利用工厂机制(factory mechanism)通过Create()方法来创建的。
例如:HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://www.baidu.com/");

二:另外,你可能预计需要显式地调用一个“Send”方法,实际上不需要。
接下来调用 HttpWebRequest.GetResponse()方法返回的是一个HttpWebResponse对象。
例如:HttpWebResponse response = (HttpWebResponse)request.GetResponse();

三:你可以把HTTP响应的数据流(stream)绑定到一个StreamReader对象,然后就可以通过ReadToEnd()方法把整个HTTP响应作为一个字符串取回。
也可以通过 StreamReader.ReadLine()方法逐行取回HTTP响应的内容。

这种技术展示了如何限制请求重定向(request redirections)的次数, 并且设置了一个超时限制。下面是HttpWebRequest的一些属性,这些属性对于轻量级的自动化测试程序是非常重要的。

1、AllowAutoRedirect:获取或设置一个值,该值指示请求是否应跟随重定向响应。
例如:request.AllowAutoRedirect = true; 
2、CookieContainer:获取或设置与此请求关联的cookie。
例如:request.CookieContainer = container;       //container是cookie
3、Credentials:获取或设置请求的身份验证信息。
4、KeepAlive:获取或设置一个值,该值指示是否与 Internet 资源建立持久性连接。
例如:request.KeepAlive = false;
5、MaximumAutomaticRedirections:获取或设置请求将跟随的重定向的最大数目。
6、Proxy:获取或设置请求的代理信息。
例如:request.Proxy = new WebProxy("10.60.0.xx");
7、SendChunked:获取或设置一个值,该值指示是否将数据分段发送到 Internet 资源。
8、Timeout:获取或设置请求的超时值。
例如:request.Timeout = 10000;
9、UserAgent:获取或设置 User-agent HTTP 标头的值。
例如:request.UserAgent = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 6.0; SLCC1; .NET CLR 2.0.50727; Media Center PC 5.0; .NET CLR 3.0.04506; InfoPath.2; .NET CLR 3.5.21022; CIBA)";

例子2:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net;
using System.IO;
using System.Threading;

namespace checkurl
{
    class Program
    {
        static String[] url = new String[2]{ "http://www.baidu.com/","http://www.google.com.hk/" };
        static int completeProxyCount;
        public static ManualResetEvent clientsCompletedEvent = new ManualResetEvent(false);

       static void Main(string[] args)
        {
          
            for (int i = 0; i < url.Length; i++)
            {
               ThreadPool.QueueUserWorkItem(new WaitCallback(MyThreadWork), i);             
            }
            try
            {
                clientsCompletedEvent.WaitOne();
              
            }
            finally
            {
                clientsCompletedEvent.Close();
            }
            System.Console.ReadLine();
         
        }
        public static void MyThreadWork(object state)
        {
            urlcheck(Convert.ToInt32(state)); 
                              
        }
        static void urlcheck(int i)
        {
           System.Net.ServicePointManager.DefaultConnectionLimit = 1000;
            try
            {
                HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url[i]);
                //request.Proxy = new WebProxy("10.60.0.XX");
                //request.CookieContainer = container;
                request.Method = "GET";
                request.KeepAlive = false;
                request.UserAgent = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 6.0; SLCC1; .NET CLR 2.0.50727; Media Center PC 5.0; .NET CLR 3.0.04506; InfoPath.2; .NET CLR 3.5.21022; CIBA)";
                request.Timeout = 10000;

                WebResponse response = request.GetResponse();

                if (response.ResponseUri.ToString() == url[i])
                {
                    System.Console.WriteLine("第{0}个url请求成功,response的url是:{1}", i, response.ResponseUri.ToString());
                }
                else
                {
                    System.Console.WriteLine("第{0}个url请求失败,response的url是:{1}", i, response.ResponseUri.ToString());
                }

            }
            catch (Exception ex)
            {
                System.Console.WriteLine("第" + i + "个url" + ex.Message);

            }
            finally
            {
               if (Interlocked.Increment(ref completeProxyCount) == url.Length)
                {
                    clientsCompletedEvent.Set();
                }
            }

        }
     }
}

//或者这么读取数据
System.IO.StreamReader sr = new StreamReader(response.GetResponseStream();//获取响应的数据流
System.Text.Encoding.GetEncoding("gb2312"));  //编码是gb2312

String responseFromserver = sr.ReadToEnd();  //读取数据流
Console.Write(responseFromserver);
sr.Close();
response.Close();

//获取http地址上的图片
 System.Drawing.Image img;        img = new System.Drawing.Bitmap(response.GetResponseStream());

TAG:

 

评分:0

我来说两句

Open Toolbar