C# HttpWebRequest 通用类1 - 转

/*

使用方法:
MyHttp loHttp = new MyHttp();
string lcHtml = "";

loHttp.HandleCookies = true;//操作Cookies
loHttp.Method = "GET";
lcHtml = loHttp.GetUrl("
http://signin.ebay.com.cn/ws2/eBayISAPI.dll?SignIn &ssPageName=h:h:sout:CN");

loHttp.AddPostKey("Key", "Value");
loHttp.Referer = "
http://signin.ebay.com.cn/ws2/eBayISAPI.dll?SignIn &ssPageName=h:h:sout:CN";

loHttp.Method = "POST";
lcHtml = loHttp.GetUrl("
http://signin.ebay.com.cn/ws2/eBayISAPI.dll ");

MessageBox.Show(loHttp.ErrorMsg);
MessageBox.Show(lcHtml);

*/

using  System;
using  System.Collections;
using  System.Text;
using  System.Web;
using  System.Windows.Forms; // only For Use MessageBox
using  System.Net;
using  System.IO;
using  System.Diagnostics;

namespace  HttpWeb
{
    
public   class  MyHttp
    {
        
///   <summary>
        
///  User name used for Authentication. 
        
///  To use the currently logged in user when accessing an NTLM resource you can use "AUTOLOGIN".
        
///   </summary>
         public   string  Username
        {
            
get  {  return   this .cUsername; }
            
set  { cUsername  =  value; }
        }

        
///   <summary>
        
///  Password for Authentication.
        
///   </summary>
         public   string  Password
        {
            
get  {  return   this .cPassword; }
            
set  {  this .cPassword  =  value; }
        }

        
///   <summary>
        
///  Address of the Proxy Server to be used.
        
///  Use optional DEFAULTPROXY value to specify that you want to IE's Proxy Settings
        
///   </summary>
         public   string  ProxyAddress
        {
            
get  {  return   this .cProxyAddress; }
            
set  {  this .cProxyAddress  =  value; }
        }

        
///   <summary>
        
///  Semicolon separated Address list of the servers the proxy is not used for.
        
///   </summary>
         public   string  ProxyBypass
        {
            
get  {  return   this .cProxyBypass; }
            
set  {  this .cProxyBypass  =  value; }
        }

        
///   <summary>
        
///  Username for a password validating Proxy. Only used if the proxy info is set.
        
///   </summary>
         public   string  ProxyUsername
        {
            
get  {  return   this .cProxyUsername; }
            
set  {  this .cProxyUsername  =  value; }
        }
        
///   <summary>
        
///  Password for a password validating Proxy. Only used if the proxy info is set.
        
///   </summary>
         public   string  ProxyPassword
        {
            
get  {  return   this .cProxyPassword; }
            
set  {  this .cProxyPassword  =  value; }
        }

        
///   <summary>
        
///  Timeout for the Web request in seconds. Times out on connection, read and send operations.
        
///  Default is 30 seconds.
        
///   </summary>
         public   int  Timeout
        {
            
get  {  return   this .nConnectTimeout; }
            
set  {  this .nConnectTimeout  =  value; }
        }



        
public   bool  HandleReferer
        {
            
get  {  return   this .bHandleReferer; }
            
set  {  this .bHandleReferer  =  value; }
        }

        
///   <summary>
        
///  引用页
        
///   </summary>
         public   string  Referer
        {
            
get  {  return   this .cReferer; }
            
set  {  this .cReferer  =  value; }
        }

        
///   <summary>
        
///  提交模式,默认是POST,用GET模式的时候不能使用PostData
        
///   </summary>
        
///   <value></value>
         public   string  Method
        {
            
get  {  return   this .cMethod; }
            
set  {  this .cMethod  =  value; }
        }
        
///   <summary>
        
///  Error Message if the Error Flag is set or an error value is returned from a method.
        
///   </summary>
         public   string  ErrorMsg
        {
            
get  {  return   this .cErrorMsg; }
            
set  {  this .cErrorMsg  =  value; }
        }

        
///   <summary>
        
///  Error flag if an error occurred.
        
///   </summary>
         public   bool  Error
        {
            
get  {  return   this .bError; }
            
set  {  this .bError  =  value; }
        }

        
///   <summary>
        
///  Determines whether errors cause exceptions to be thrown. By default errors 
        
///  are handled in the class and the Error property is set for error conditions.
        
///  (not implemented at this time).
        
///   </summary>
         public   bool  ThrowExceptions
        {
            
get  {  return  bThrowExceptions; }
            
set  {  this .bThrowExceptions  =  value; }
        }

        
///   <summary>
        
///  If set to a non-zero value will automatically track cookies. The number assigned is the cookie count.
        
///   </summary>
         public   bool  HandleCookies
        {
            
get  {  return   this .bHandleCookies; }
            
set  {  this .bHandleCookies  =  value; }
        }
        
// Cookies集合
         public  CookieCollection Cookies
        {
            
get  {  return   this .oCookies; }
            
set  {  this .oCookies  =  value; }
        }

        
// 默认的编码
         public   string  MyEncoding
        {
            
get  {  return   this .cEncoding; }
            
set  {  this .cEncoding  =  value; }
        }

        
// 自动跳转到新的页面
         public   bool  Location
        {
            
get  {  return   this .bLocation; }
            
set  {  this .bLocation  =  value; }
        }
        
//  *** member properties
         string  cPostData  =   "" // 提交的数据
         int  nConnectTimeout  =   180 // 超时
         string  cUserAgent  =   "  Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.0.3705; .NET CLR 2.0.50727; .NET CLR 1.1.4322) " // 用户代理
         bool  bHandleReferer  =   true // 自动操作引用页
         string  cReferer  =   "" // 引用页
         string  cMethod  =   " POST " // 提交模式POST ro GET
         string  cUsername  =   "" ;
        
string  cPassword  =   "" ;
        
string  cProxyAddress  =   "" ;
        
string  cProxyBypass  =   "" ;
        
string  cProxyUsername  =   "" ;
        
string  cProxyPassword  =   "" ;
        
bool  bThrowExceptions  =   true // 是否抛出异常
         bool  bHandleCookies  =   true // 自动操作Cookies
        CookieCollection oCookies;
        
string  cErrorMsg  =   "" // 错误返回
         bool  bError  =   false ;
        
string  cEncoding  =   " GB2312 " ; // UTF-8 GB2312
         bool  bLocation  =   false ;

        
public  MyHttp() { }

        
///   <summary>
        
///  增加提交的值
        
///   </summary>
        
///   <param name="Key"></param>
        
///   <param name="Value"></param>
         public   void  AddPostKey( string  Key,  string  Value)
        {
            cPostData 
+=  Key  +   " = "   +  System.Web.HttpUtility.UrlEncode(Value, System.Text.Encoding.GetEncoding( " GB2312 " ))  +   " & " ;
        }

        
///   <summary>
        
///  增加提交的连续值(完整或者部分完整值)
        
///   </summary>
        
///   <param name="FullPostBuffer"></param>
         public   void  AddPostKey( string  FullPostBuffer)
        {
            cPostData 
+=  FullPostBuffer;
        }







        
public   string  GetUrl( string  Url)
        {
            Url 
=  UrlEncode(Url);
            Debug.WriteLine(Url);
            
try
            {
                
this .bError  =   false ;
                
this .cErrorMsg  =   "" ;

                
// 通用的属性
                HttpWebRequest Request  =  (HttpWebRequest)WebRequest.Create(Url);
                Request.UserAgent 
=   this .cUserAgent;
                Request.Timeout 
=   this .nConnectTimeout  *   1000 ;
                Request.Accept 
=   " image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, */* " ;
                Request.Referer 
=   this .cReferer;
                
// Request.Connection = "keep-alive";

                
//  需要安全验证的访问
                 if  ( this .cUsername.Length  >   0 )
                {
                    
if  ( this .cUsername  ==   " AUTOLOGIN " )
                        Request.Credentials 
=  CredentialCache.DefaultCredentials;
                    
else
                        Request.Credentials 
=   new  NetworkCredential( this .cUsername,  this .cPassword);
                }

                
//  需要使用Proxy和其配置
                 if  ( this .cProxyAddress.Length  >   0 )
                {
                    
if  ( this .cProxyAddress  ==   " DEFAULTPROXY " )
                    {
                        Request.Proxy 
=   new  WebProxy();
                        Request.Proxy 
=  WebProxy.GetDefaultProxy();
                    }
                    
else
                    {
                        WebProxy loProxy 
=   new  WebProxy( this .cProxyAddress,  true );
                        
if  ( this .cProxyBypass.Length  >   0 )
                        {
                            loProxy.BypassList 
=   this .cProxyBypass.Split( ' ; ' );
                        }

                        
if  ( this .cProxyUsername.Length  >   0 )
                            loProxy.Credentials 
=   new  NetworkCredential( this .cProxyUsername,  this .cProxyPassword);

                        Request.Proxy 
=  loProxy;
                    }
                }

                
//  需要操作Cookies和自动重用Cookies
                 if  ( this .bHandleCookies)
                {
                    Request.CookieContainer 
=   new  CookieContainer();
                    
if  ( this .oCookies  !=   null   &&   this .oCookies.Count  >   0 )
                    {
                        Request.CookieContainer.Add(
this .oCookies);
                    }
                }

                Request.Method 
=  cMethod; // 设置提交模式

                
if  ( this .cMethod  ==   " POST " )
                {
                    Request.ContentType 
=   " application/x-www-form-urlencoded " ;
                    
if  ( this .cPostData.EndsWith( " & " ))
                        
this .cPostData  =   this .cPostData.Substring( 0 this .cPostData.Length  -   1 );

                    
// MessageBox.Show(this.cPostData);

                    
byte [] lbPostBuffer  =  System.Text.Encoding.GetEncoding(cEncoding).GetBytes(cPostData);
                    Request.ContentLength 
=  lbPostBuffer.Length;
                    Stream loPostData 
=  Request.GetRequestStream();

                    loPostData.Write(lbPostBuffer, 
0 , lbPostBuffer.Length);
                    loPostData.Close();

                    
//  *** clear the POST buffer
                     this .cPostData  =   "" ;
                }

                
//  *** Retrieve the response headers 
                HttpWebResponse Response  =  (HttpWebResponse)Request.GetResponse();

                
//  ** Save cookies the server sends
                 if  ( this .bHandleCookies)
                {
                    
if  (Response.Cookies.Count  >   0 )
                    {
                        
if  ( this .oCookies  ==   null )
                        {
                            
this .oCookies  =  Response.Cookies;
                        }
                        
else
                        {
                            
//  ** If we already have cookies update the list
                             foreach  (Cookie oRespCookie  in  Response.Cookies)
                            {
                                
bool  bMatch  =   false ;
                                
foreach  (Cookie oReqCookie  in   this .oCookies)
                                {
                                    
if  (oReqCookie.Name  ==  oRespCookie.Name)
                                    {
                                        oReqCookie.Value 
=  oRespCookie.Value;
                                        bMatch 
=   true ;
                                        
break //  
                                    }
                                } 
//  for each ReqCookies
                                 if  ( ! bMatch)
                                    
this .oCookies.Add(oRespCookie);
                            } 
//  for each Response.Cookies
                        }  //  this.Cookies == null
                    }  //  if Response.Cookie.Count > 0
                }  //  if this.bHandleCookies = 0


                
//  *** Save the response object for external access
                Encoding enc;
                
try
                {
                    
if  (Response.ContentEncoding.Length  >   0 )
                        enc 
=  Encoding.GetEncoding(Response.ContentEncoding);
                    
else
                        enc 
=  Encoding.GetEncoding(cEncoding);
                }
                
catch
                {
                    
//  *** Invalid encoding passed
                    enc  =  Encoding.GetEncoding(cEncoding);
                }

                
//  *** drag to a stream
                StreamReader strResponse  =   new  StreamReader(Response.GetResponseStream(), enc);
                
string  str  =  strResponse.ReadToEnd();
                Response.Close();
                strResponse.Close();
                
// 自动跟踪引用页
                 if  ( this .bHandleReferer)
                {
                    
this .cReferer  =  Url;
                }
                
// 自动处理HTTP/1.0 302 Moved Temporarily中的Location后的页面。(自动完成跳转)
                 if  ( this .bLocation)
                {

                    
// 这里需要自动获得跳转页面的地址。并且再次使用这个方法访问页面
                }
                
return  str;
            }
            
catch  (Exception e)
            {
                
if  ( this .bThrowExceptions)
                    
throw  e;
                
this .cErrorMsg  =  e.Message;
                
this .bError  =   true ;
                
return   null ;
            }
        }
        
private   string  UrlEncode( string  url)
        {
            
byte [] bs  =  Encoding.GetEncoding( " gb2312 " ).GetBytes(url);
            StringBuilder sb 
=   new  StringBuilder();
            
for  ( int  i  =   0 ; i  <  bs.Length; i ++ )
            {
                
if  (bs[i]  <   128 )
                    sb.Append((
char )bs[i]);
                
else
                {
                    sb.Append(
" % "   +  bs[i ++ ].ToString( " x " ).PadLeft( 2 ' 0 ' ));
                    sb.Append(
" % "   +  bs[i].ToString( " x " ).PadLeft( 2 ' 0 ' ));
                }
            }
            
return  sb.ToString();
        }


    }
}

转载于:https://www.cnblogs.com/afish1984/archive/2009/07/17/1525463.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值