namespace Cnlamar.Net
{
using System;
using System.Net;
using System.Web;
using System.IO;
using System.Text; /// <summary>
/// 功能:取得Internet上的URL页的源码
/// </summary>
public class CallWeb
{
#region 私有变量
/// <summary>
/// 网页URL地址
/// </summary>
private string url=null;
/// <summary>
/// 是否使用代码服务器:0 不使用  1 使用代理服务器
/// </summary>
private int proxyState=0;
/// <summary>
/// 代理服务器地址
/// </summary>
private string proxyAddress=null;
/// <summary>
/// 代理服务器端口
/// </summary>
private string proxyPort=null;
/// <summary>
/// 代理服务器用户名
/// </summary>
private string proxyAccount=null;
/// <summary>
/// 代理服务器密码
/// </summary>
private string proxyPassword=null;
/// <summary>
/// 代理服务器域
/// </summary>
private string proxyDomain=null;
#endregion #region 公共属性
/// <summary>
/// 欲读取的URL地址
/// </summary>
public string Url
{
get{return url;}
set{url=value;}
}
/// <summary>
/// 是否使用代理服务器标志
/// </summary>
public int ProxyState
{
get{return proxyState;}
set{proxyState=value;}
}
/// <summary>
/// 代理服务器地址
/// </summary>
public string ProxyAddress
{
get{return proxyAddress;}
set{proxyAddress=value;}
}
/// <summary>
/// 代理服务器端口
/// </summary>
public string ProxyPort
{
get{return proxyPort;}
set{proxyPort=value;}
}
/// <summary>
/// 代理服务器账号
/// </summary>
public string ProxyAccount
{
get{return proxyAccount;}
set{proxyAccount=value;}
}
/// <summary>
/// 代理服务器密码
/// </summary>
public string ProxyPassword
{
get{return proxyPassword;}
set{proxyPassword=value;}
}
/// <summary>
/// 代理服务器域
/// </summary>
public string ProxyDomain
{
get{return proxyDomain;}
set{proxyDomain=value;}
}        public string Method
        {
            get { return _Method; }
            set { _Method = value; }
        }
        private string _Method;        public string[] PostData
        {
            get { return _PostData; }
            set { _PostData = value; }
        }
        private string[] _PostData;        public Encoding MyEncoding
        {
            get { return _MyEncoding; }
            set { _MyEncoding = value; }
        }
        private Encoding _MyEncoding;        
#endregion #region 公共方法
/// <summary>
/// 读取指定URL地址,存到指定文件中
/// </summary>
public string Get() 

string ResponseText = String.Empty;
WebRequest request = WebRequest.Create(this.url);
            if (Method != null && Method != String.Empty)
            {
                request.Method = Method;
            } //使用代理服务器的处理
if(this.proxyState==1)
{
//默认读取80端口的数据
if(this.proxyPort==null)
this.ProxyPort="80"; WebProxy myProxy=new WebProxy(); 
myProxy = (WebProxy)request.Proxy; 
myProxy.Address = new Uri(this.ProxyAddress+":"+this.ProxyPort); 
myProxy.Credentials = new NetworkCredential(this.proxyAccount, this.proxyPassword, this.ProxyDomain);
request.Proxy = myProxy; 
} //请求服务
            if (Method == "POST")
            {
                string strPostData = String.Empty;
                for (int i = 0; i < PostData.Length; i++)
                {
                    strPostData += PostData[i] + "&";
                }
                strPostData = strPostData.TrimEnd('&');
                byte[] bytePostData = MyEncoding.GetBytes("?" + strPostData);
                Stream postStream = request.GetRequestStream();
                postStream.Write(bytePostData, 0, bytePostData.Length);
                postStream.Close();
            }
System.Net.WebResponse response = request.GetResponse(); //返回信息
Stream resStream = response.GetResponseStream();
            StreamReader sr = new StreamReader(resStream, MyEncoding);
ResponseText = sr.ReadToEnd();
resStream.Close(); 
sr.Close(); return ResponseText;
}
#endregion }
}

解决方案 »

  1.   

    没有验证码,我测试了本地的,登录时靠按钮事件触发的,这样是不是不能用post?
      

  2.   

    http://www.cnblogs.com/ziyang/archive/2008/07/10/1240089.html
      

  3.   

    如果对方网页是HTTP但需要登录后才能查看的 ,这个怎么实现呀
      

  4.   

    需要登录后才能查看的,你还想抓到,那确实是个问题,你得研究研究baidu的蜘蛛怎么玩的了,常规方法没法解决