语言:C#
开发环境:Visual Studio 2008
我想登录网站并从那里获取一些数据。我的问题是Cookies不起作用。每当网站说我应该激活Cookies但我通过Cookiecontainer激活Cookies时。
为了登录进度,我多次嗅到了流量,我发现没有问题。我尝试了不同的方法登录,我搜索了其他人是否有这个问题,但没有结果......
登录页面是:“www.uploaded.to”,这是我的简短登录代码:
private void login()
{
//Global CookieContainer for all the Cookies
CookieContainer _cookieContainer = new CookieContainer();
//First Login to the Website
HttpWebRequest _request1 = (HttpWebRequest)WebRequest.Create("http://uploaded.to/login");
_request1.Method = "POST";
_request1.CookieContainer = _cookieContainer;
string _postData = "email=XXXXX&password=XXXXX";
byte[] _byteArray = Encoding.UTF8.GetBytes(_postData);
Stream _reqStream = _request1.GetRequestStream();
_reqStream.Write(_byteArray, 0, _byteArray.Length);
_reqStream.Close();
HttpWebResponse _response1 = (HttpWebResponse)_request1.GetResponse();
_response1.Close();
//########################
//Follow the Link from Request1
HttpWebRequest _request2 = (HttpWebRequest)WebRequest.Create("http://uploaded.to/login?coo=1");
_request2.Method = "GET";
_request2.CookieContainer = _cookieContainer;
HttpWebResponse _response2 = (HttpWebResponse)_request2.GetResponse();
_response2.Close();
//#######################
//Get the Data from the Page after Login
HttpWebRequest _request3 = (HttpWebRequest)WebRequest.Create("http://uploaded.to/home");
_request3.Method = "GET";
_request3.CookieContainer = _cookieContainer;
HttpWebResponse _response3 = (HttpWebResponse)_request3.GetResponse();
_response3.Close();
}
我已经坚持这个问题了很多个星期,我发现没有解决方案可行,请帮助...
我再次尝试过,第一次请求工作(登录)。我得到一个带有Authentification的cookie。响应文本是url:http://uploaded.to/login?coo=1现在我必须在此URL上发出GET请求但问题是,它在此请求中不发送cookie,使用Wireshark进行检查。 httpwebrequest有问题吗?
我的代码:
CookieContainer _cookieContainer = new CookieContainer();
//First Login to the Website
HttpWebRequest _request1 = (HttpWebRequest)WebRequest.Create("http://uploaded.to/login");
_request1.Method = "POST";
_request1.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8";
_request1.AllowAutoRedirect = false;
_request1.CookieContainer = _cookieContainer;
_request1.ContentType = "application/x-www-form-urlencoded";
_request1.UserAgent = "Mozilla/5.0 (Windows; U; Windows NT 5.1; de; rv:1.9.2) Gecko/20100115 Firefox/3.6 (.NET CLR 3.5.30729)";
_request1.Headers.Add(HttpRequestHeader.CacheControl, "no-cache=set-cookie");
string _postData = "email=XXXXX&password=XXXXXX";
byte[] _byteArray = Encoding.UTF8.GetBytes(_postData);
_request1.ContentLength = _byteArray.Length;
Stream _reqStream = _request1.GetRequestStream();
_reqStream.Write(_byteArray, 0, _byteArray.Length);
_reqStream.Close();
HttpWebResponse _response1 = (HttpWebResponse)_request1.GetResponse();
StreamReader _reader1 = new StreamReader(_response1.GetResponseStream());
CookieCollection _cookieCollection = new CookieCollection();
foreach (Cookie _cook in _response1.Cookies)
{
_cookieCollection.Add(_cook);
}
wbrowser_html.DocumentText = _reader1.ReadToEnd();
_response1.Close();
_reader1.Close();
//########################
HttpWebRequest _request2 = (HttpWebRequest)WebRequest.Create("http://uploaded.to/login?coo=1");
_request2.Method = "GET";
_request2.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8";
_request2.UserAgent = "Mozilla/5.0 (Windows; U; Windows NT 5.1; de; rv:1.9.2) Gecko/20100115 Firefox/3.6 (.NET CLR 3.5.30729)";
_request2.Referer = "http://uploaded.to/login";
_request2.KeepAlive = true;
//Here I set the language and the auth cookie, works fine
_request2.CookieContainer = _cookieContainer;
_request2.CookieContainer.Add(_cookieCollection);
_request2.Headers.Add(HttpRequestHeader.CacheControl, "no-cache=set-cookie");
HttpWebResponse _response2 = (HttpWebResponse)_request2.GetResponse();
StreamReader _reader2 = new StreamReader(_response2.GetResponseStream());
wbrowser_html.DocumentText = _reader2.ReadToEnd();
_response2.Close();
_reader2.Close();
现在如果我查看Wireshark并看到第二个请求中没有cookie。我已将它们添加到请求中,但无论如何它们都没有发送到服务器?
有人有想法解决这个问题吗?
答案 0 :(得分:0)
为什么不使用WebClient类?
NameValueCollection loginData = new NameValueCollection();
loginData.Add("email", "your_email");
loginData.Add("password", "your_password");
WebClient client = new WebClient();
string source = Encoding.UTF8.GetString(client.UploadValues("http://uploaded.to/login", loginData));
string cookie = client.ResponseHeaders["Set-Cookie"];
client.Headers["Cookie"] = cookie;
source = client.DownloadString("http://uploaded.to/some-page");