zoukankan      html  css  js  c++  java
  • WebClient和HttpWebRequest的简单用法

    下面列出两个类的实现方法,可以实现提交,但要指出的是,这两个方法都没有实现COOKIES的传递,所以只能提交,但是并不能保存cookies记录。下一次发布的时候将来发布日前写的一个小软件AutoClick,它是一个能自实现自动登录,并发布数据的功能,如果再加上一个蜘蛛那就是一个自已灌水机了,呵呵。
    WebClient方法:

    System.Net.WebClient wc = new WebClient();
    wc.Headers.Add(
    "Accept-Language""zh-cn");
    wc.Headers.Add(
    "Content-Type""application/x-www-form-urlencoded");
    string cont = System.Web.HttpUtility.UrlEncode(content, System.Text.Encoding.Default);
    string postData = string.Format("username=xxx&password=xxx&to={0}&content={1}", tel,cont);
    byte[] bReturn = wc.UploadData("http://xxx.com/xx.asp?""POST", System.Text.Encoding.Default.GetBytes(postData));
    wc.Dispose();
    return System.Text.Encoding.GetEncoding("gb2312").GetString(bReturn);

    HttpWebRequest方法:


    private void Page_Load(object sender, System.EventArgs e)
     
    {
     
      
      
    string url="http://localhost/webUserWindowExample/WebForm5.aspx";
       System.Net .CookieContainer cook
    =new System.Net .CookieContainer();
      
    string gets=getHTMLByUrlCook(url,ref cook,"Get",null,true);
      
    string strViewState = System.Text .RegularExpressions .Regex.Replace(gets,"[\\s*\\S*]*<input type=\"hidden\" name=\"__VIEWSTATE\" value=\"([^\"]*)\"[\\s*\\S*]*","$1",System.Text .RegularExpressions.RegexOptions.IgnoreCase);
      
      
    string param="__VIEWSTATE="+System.Web.HttpUtility.UrlEncode(strViewState)+"&TextBox1=xxxx&Button1=Button&CheckBox1=on";
      
      
    string s=a.getHTMLByUrlCook(url,ref cook,"POST",param,true);
       Response.Write(s);
      }

    public  string getHTMLByUrlCook(string url,ref System.Net.CookieContainer cook,string sMethod,string Param,bool bAutoRedirect,System.Text.Encoding ecode)
    {
    sMethod 
    = sMethod.ToUpper();
    sMethod 
    = sMethod!="POST"?"GET":sMethod;
    string res ="";
    HttpWebRequest re 
    =(HttpWebRequest)HttpWebRequest.Create(url);
    re.CookieContainer 
    = cook; // attach the cook object 
    re.Method = sMethod;
    re.AllowAutoRedirect 
    = bAutoRedirect;
    re.UserAgent
    ="Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; MyIE2; .NET CLR 1.1.4322)";


    if(Public.Session.bUsePox) //利用代理
    {
    int Port = 80;
    if(Public.IsInt(this.Session.PoxPort))
    {
    Port 
    = Convert.ToInt32(this.Session.PoxPort);
    }

    WebProxy pox 
    = new WebProxy(this.Session.PoxIp,Port);
    pox 
    = (WebProxy)re.Proxy;
    }



    //re.Referer="http://expert.csdn.net/Expert/topic/2839/2839298.xml?temp=.2714197";


    //re.ClientCertificates = new System.Security.Cryptography.X509Certificates.X509CertificateCollection();
    //re.ClientCertificates = System.Security.Cryptography.X509Certificates.X509Certificate.CreateFromSignedFile();

    //re.Timeout = 2000;
    re.Referer = url;
    if (sMethod =="POST"// Post data to Server
    {
    re.ContentType
    ="application/x-www-form-urlencoded";

    byte[] b=System.Text.Encoding.UTF8.GetBytes(Param);
    re.ContentLength 
    = b.Length;
    try
    {
    Stream oSRe 
    = re.GetRequestStream();
    oSRe.Write(b,
    0,b.Length);
    oSRe.Close();
    oSRe 
    = null;
    }

    catch(Exception )
    {
    re 
    = null;
    return "-1";
    }

    }


    HttpWebResponse rep 
    = null;
    Stream oresponseStream 
    = null;
    StreamReader oSReader 
    = null;
    try
    {
    rep
    =(HttpWebResponse)re.GetResponse();

    oresponseStream 
    = rep.GetResponseStream();
    oSReader  
    = new StreamReader(oResponseStream,ecode);
    res 
    =oSReader.ReadToEnd();
    }

    catch (System.Net.WebException  e)
    {
    //res ="-1";

    res 
    = e.ToString();
    }


    if (rep!=null
    {
    rep.Close();
    rep 
    = null;
    }

    if(oResponseStream!= null)
    {
    oresponseStream.Close();
    oresponseStream 
    = null;
    }


    if(oSReader!=null)
    {
    oSReader.Close();
    oSReader 
    = null;
    }

    re 
    = null;

    return res;

    }

    关于协议冲突:在ASP.NET 2.0里使用web.config设置:

    <system.net>
    <settings>
    <httpWebRequest useUnsafeHeaderParsing = "true"/>
    </settings>
    </system.net>
  • 相关阅读:
    杭电2031进制转换
    杭电2033人见人爱A+B
    【转】到底怎么样才叫看书?
    方便单个实体更新的DbContext扩展方法,比如Edit页面
    使用Newtonsoft.Json
    代码配置 vs. 配置文件
    进程到创建
    C#+VBA 操作EXCEL(转)
    基于定位的社交应用Foursquare开源网址(wp7)
    深入理解计算机系统实验
  • 原文地址:https://www.cnblogs.com/zpc870921/p/2640515.html
Copyright © 2011-2022 走看看