作者mongsq (有学问的孟孟)
看板C_Sharp
标题Re: [问题] 请问如何c#登入有帐号密码的网页 抓网괠…
时间Thu Sep 20 19:11:54 2007
我的做法
HttpWebRequest webReq = (HttpWebRequest)WebRequest.Create("
http://LoginUrl");
//上面的网址要自己查一下,通常是登入页
webReq.CookieContainer = new CookieContainer(); //拿来装Cookie的东西
webReq.ContentType = "application/x-www-form-urlencoded";
webReq.Method = "POST";
string postString = "username=abc&password=123";
//该post的东西可能要自己查一下,可以用拦截封包的软体来得知
byte[] postData = Encoding.ASCII.GetBytes(postString)
webReq.ContentLength = postData.Length;
Stream sm = webReq.GetRequestStream();
sm.Write(postData, 0, postData.Length);
sm.Close();
//取得回应
HttpWebResponse webResp = (HttpWebResponse)webReq.GetResponse();
//取得cookie
string cookie = webReq.CookieContainer.GetCookieHeader(webReq.RequestUri);
webResp.Close();
//再来建立你要取得的Request
webReq = (HttpWebRequest)WebRequest.Create("
http://WhatYouWantToGet");
//将刚刚取得的cookie加上去
webReq.Headers.Add("cookie:" + cookie);
//取得回应
webResp = (HttpWebResponse)webReq.GetResponse();
//取得网站资料
Stream stream = webResp.GetResponseStream();
StreamReader sr = new StreamReader(stream, Encoding.Default);
//上面的编码得自己判断
String webData = sr.ReadToEnd();
webResp.Close();
之前在做的时候还有遇到一个问题
在取得cookie的时候伺服器会传回417错误
如果有发生的话
在取得cookie之前把ServicePointManager.Expect100Continue设成false就行了
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 220.142.138.27
1F:推 liptonbin:谢谢你喔 不过还是会少网页原始码 = = 09/21 13:49
2F:→ conanist:这个方法是帮助你通过login网页这样你才有权限进入爬资料 06/18 11:15
3F:→ conanist:至於匿名存取爬网址 A Simple Crawler Using C# Sockets 06/18 11:19