不知道怎么实现?(我现在只是一个一个的模拟登录采集信息,感觉很慢)
谢谢!!
9 个解决方案
#1
当然可以,注意独立保持cookie就可以了。
#2
所谓登录,就是第一次访问,服务器返回一个set-cookie指令(不保存到cookie存储中),客户端浏览器在之后的访问中加上它,而服务器把所有这个set-cookie返回的cookie(很多web server将它命名为sessionid一类),识别为同一系列的请求,也就是一个会话,而服务器通过跟踪会话,当用户登录成功,将它存入会话中,判断出后续的操作是“已经登录的”。如果你把这个原理搞清楚了,就知道怎么做了。
#3
谢谢,我现在学习使用异步操作,但遇到一个问题,还请指点
string user = "123", pwd = "123";
HttpWebRequest request = (HttpWebRequest)ar.AsyncState;
Stream postStream = request.EndGetRequestStream(ar);
string postdata = "User=" + user + "&Pass=" + pwd + "&Button=Login";
byte[] byteArray = Encoding.UTF8.GetBytes(postdata);
postStream.Write(byteArray, 0, postdata.Length);
postStream.Close();
request.BeginGetResponse(new AsyncCallback(GetResponseCallbackCookie), request);
这段代码中,我提交post数据进行登录,我的意思是登录成功后我就保存相应的cookie。我新建了一个字典dic<string username,string cookieheader>...用这个字典来保存15个账户的cookie,以便获取信息时提交。
但上面代码中,我虽然给post数据填写了账户以及密码,但是我怎么才能把这个user账户名传值到GetResponseCallbackCookie函数中,
void GetResponseCallbackCookie(IAsyncResult asynchronousResult)
{
HttpWebRequest request = (HttpWebRequest)asynchronousResult.AsyncState;
string asd= asynchronousResult.ToString();
string asdasd = request.Credentials.ToString();
// End the operation
HttpWebResponse response = (HttpWebResponse)request.EndGetResponse(asynchronousResult);
Stream streamResponse = response.GetResponseStream();
StreamReader streamRead = new StreamReader(streamResponse);
string responseString = streamRead.ReadToEnd();
//此时这里根据返回的字符串确认登录成功,我想保存cookie信息
string CookieHeader = request.CookieContainer.GetCookieHeader(request.RequestUri);
Dic.add(user,CookieHeader);我希望在这里获取前面post的user,写入字典
streamResponse.Close();
streamRead.Close();
response.Close();
allDone.Set();
}
请问有什么办法可以在上面那里获取user的值吗,谢谢!!
#4
一个既然ok了,开15个线程不就ok了,不行你启动15次你现在的软件也能完成
#5
谢谢各位,我学习了下cookie,每次登录后把cookie保存下来(string CookieHeader = request.CookieContainer.GetCookieHeader(request.RequestUri);)就ok了。等每次获取数据时带上CookieHeader 就可以了。
#6
自己弄明白就是收获最大的。
#7
解决方法写成博客了,欢迎指点
http://blog.csdn.net/wwwww112233/article/details/8562545
http://blog.csdn.net/wwwww112233/article/details/8562545
#8
把拿到的cookie放到浏览里并打开怎么做呢?用InternetSetCookie 这个API好像不行呢。。。
#9
#1
当然可以,注意独立保持cookie就可以了。
#2
所谓登录,就是第一次访问,服务器返回一个set-cookie指令(不保存到cookie存储中),客户端浏览器在之后的访问中加上它,而服务器把所有这个set-cookie返回的cookie(很多web server将它命名为sessionid一类),识别为同一系列的请求,也就是一个会话,而服务器通过跟踪会话,当用户登录成功,将它存入会话中,判断出后续的操作是“已经登录的”。如果你把这个原理搞清楚了,就知道怎么做了。
#3
谢谢,我现在学习使用异步操作,但遇到一个问题,还请指点
string user = "123", pwd = "123";
HttpWebRequest request = (HttpWebRequest)ar.AsyncState;
Stream postStream = request.EndGetRequestStream(ar);
string postdata = "User=" + user + "&Pass=" + pwd + "&Button=Login";
byte[] byteArray = Encoding.UTF8.GetBytes(postdata);
postStream.Write(byteArray, 0, postdata.Length);
postStream.Close();
request.BeginGetResponse(new AsyncCallback(GetResponseCallbackCookie), request);
这段代码中,我提交post数据进行登录,我的意思是登录成功后我就保存相应的cookie。我新建了一个字典dic<string username,string cookieheader>...用这个字典来保存15个账户的cookie,以便获取信息时提交。
但上面代码中,我虽然给post数据填写了账户以及密码,但是我怎么才能把这个user账户名传值到GetResponseCallbackCookie函数中,
void GetResponseCallbackCookie(IAsyncResult asynchronousResult)
{
HttpWebRequest request = (HttpWebRequest)asynchronousResult.AsyncState;
string asd= asynchronousResult.ToString();
string asdasd = request.Credentials.ToString();
// End the operation
HttpWebResponse response = (HttpWebResponse)request.EndGetResponse(asynchronousResult);
Stream streamResponse = response.GetResponseStream();
StreamReader streamRead = new StreamReader(streamResponse);
string responseString = streamRead.ReadToEnd();
//此时这里根据返回的字符串确认登录成功,我想保存cookie信息
string CookieHeader = request.CookieContainer.GetCookieHeader(request.RequestUri);
Dic.add(user,CookieHeader);我希望在这里获取前面post的user,写入字典
streamResponse.Close();
streamRead.Close();
response.Close();
allDone.Set();
}
请问有什么办法可以在上面那里获取user的值吗,谢谢!!
#4
一个既然ok了,开15个线程不就ok了,不行你启动15次你现在的软件也能完成
#5
谢谢各位,我学习了下cookie,每次登录后把cookie保存下来(string CookieHeader = request.CookieContainer.GetCookieHeader(request.RequestUri);)就ok了。等每次获取数据时带上CookieHeader 就可以了。
#6
自己弄明白就是收获最大的。
#7
解决方法写成博客了,欢迎指点
http://blog.csdn.net/wwwww112233/article/details/8562545
http://blog.csdn.net/wwwww112233/article/details/8562545
#8
把拿到的cookie放到浏览里并打开怎么做呢?用InternetSetCookie 这个API好像不行呢。。。