WebClient和HttpWebRequest的简单用法
2012-08-15 17:49 C#与.NET探索者 阅读(494) 评论(0) 编辑 收藏 举报下面列出两个类的实现方法,可以实现提交,但要指出的是,这两个方法都没有实现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);
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>
<settings>
<httpWebRequest useUnsafeHeaderParsing = "true"/>
</settings>
</system.net>