请教c#如何实现对网站的多用户同时登录?

时间:2022-08-29 11:52:48
有个网站,我有15个帐号密码,不知道能不能实现15个用户同时登录上去,我的意思是c#多线程下实现15个用户同时登录上去采集我需要的相关信息。
不知道怎么实现?(我现在只是一个一个的模拟登录采集信息,感觉很慢)
谢谢!!

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


引用 5 楼 wwwww112233 的回复:
谢谢各位,我学习了下cookie,每次登录后把cookie保存下来(string CookieHeader = request.CookieContainer.GetCookieHeader(request.RequestUri);)就ok了。等每次获取数据时带上CookieHeader 就可以了。

自己弄明白就是收获最大的。

#7


解决方法写成博客了,欢迎指点
http://blog.csdn.net/wwwww112233/article/details/8562545

#8


引用 7 楼 wwwww112233 的回复:
解决方法写成博客了,欢迎指点
http://blog.csdn.net/wwwww112233/article/details/8562545


把拿到的cookie放到浏览里并打开怎么做呢?用InternetSetCookie 这个API好像不行呢。。。

#9


该回复于2014-11-06 09:11:28被管理员删除

#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


引用 5 楼 wwwww112233 的回复:
谢谢各位,我学习了下cookie,每次登录后把cookie保存下来(string CookieHeader = request.CookieContainer.GetCookieHeader(request.RequestUri);)就ok了。等每次获取数据时带上CookieHeader 就可以了。

自己弄明白就是收获最大的。

#7


解决方法写成博客了,欢迎指点
http://blog.csdn.net/wwwww112233/article/details/8562545

#8


引用 7 楼 wwwww112233 的回复:
解决方法写成博客了,欢迎指点
http://blog.csdn.net/wwwww112233/article/details/8562545


把拿到的cookie放到浏览里并打开怎么做呢?用InternetSetCookie 这个API好像不行呢。。。

#9


该回复于2014-11-06 09:11:28被管理员删除