Post登录成功后,如何以登录状态获取其他页面的信息

Javis486
博客专家认证
2014-09-04 05:07:43
比如我成功Post登录了百度,但是还想继续进行签到或者发帖的操作。

我试了把3次Response返回的Cookie都保存了在了一个CookieCollection,最后用带上这个Cookie的Get方法访问了http://zhidao.baidu.com/uhome 但还是处于未登录状态?

下面是登录百度的代码:
 static void Main(string[] args)
{
HttpWebRequest request = (HttpWebRequest)WebRequest.Create("https://passport.baidu.com/v2/api/?getapi&class=login&tpl=mn&tangram=true");
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
var cookie = response.Headers[HttpResponseHeader.SetCookie];
request.Abort();
response.Close();

request = (HttpWebRequest)WebRequest.Create("https://passport.baidu.com/v2/api/?getapi&class=login&tpl=mn&tangram=true");
request.Headers[HttpRequestHeader.Cookie] = cookie;
response = (HttpWebResponse)request.GetResponse();
StreamReader sr = new StreamReader(response.GetResponseStream());
string content = sr.ReadToEnd();
string token = CutBetween(content, "bdPass.api.params.login_token=\'", "\';");
sr.Close();
request.Abort();
response.Close();

string UserName = "jiangpeng59@qq.com";
string Password = "jp1992529";
request = (HttpWebRequest)WebRequest.Create("https://passport.baidu.com/v2/api/?login");

request.Method = "POST";
request.ContentType = "application/x-www-form-urlencoded";
request.KeepAlive = true;
request.ProtocolVersion = HttpVersion.Version10;

string PostData = "ppui_logintime=" + GetFiveRandomNum() + "&charset=utf-8&codestring=" +
"&token=" + token + "&isPhone=false&index=0&u=&safeflg=0&staticpage=http%3A%2F%2Fwww.baidu.com%2Fcache%2Fuser%2Fhtml%2Fjump.html&loginType=1&tpl=mn&callback=parent.bdPass.api.login._postCallback" +
"&username=" + UserName + "&password=" + Password + "&verifycode=&mem_pass=on";
byte[] Data = Encoding.UTF8.GetBytes(PostData);
request.Headers[HttpRequestHeader.Cookie] = cookie;
Stream s = request.GetRequestStream();
s.Write(Data, 0, Data.Length);
s.Close();
response = (HttpWebResponse)request.GetResponse();
using (StreamReader read = new StreamReader(response.GetResponseStream(), Encoding.UTF8))
{
Console.Write(read.ReadToEnd());
}
Console.ReadKey();
}


结果:



...全文
505 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
失落的神庙 2014-09-05
  • 打赏
  • 举报
回复
我记得百度好像有个suss 还是什么的 一串 并不是cookie里的。 是返回页面里的 要自己写进cookie
Javis486 2014-09-05
  • 打赏
  • 举报
回复
引用 5 楼 wawd74520 的回复:
定义MyCookie 对象并实例化。 然后使用这个cookie 请求完后更新这个cookie就行了。
话说 就是不知道怎么获得百度保持登录状态的Cookie
Javis486 2014-09-05
  • 打赏
  • 举报
回复
引用 7 楼 wawd74520 的回复:
我记得百度好像有个suss 还是什么的 一串 并不是cookie里的。 是返回页面里的 要自己写进cookie
非常感谢,终于解决。。!
失落的神庙 2014-09-05
  • 打赏
  • 举报
回复
定义MyCookie 对象并实例化。 然后使用这个cookie 请求完后更新这个cookie就行了。
Javis486 2014-09-04
  • 打赏
  • 举报
回复
引用 1 楼 wawd74520 的回复:
登录成功后会返回一个链接 需要get这个链接获取cookie 然后才去进行发帖什么的
就是那个Url吗,我GET了下,貌似不行。我的问题和你刚刚回复这位仁兄的问题是一样的吗? http://bbs.csdn.net/topics/390742184?page=1#post-398128655 高分求助 c#模拟登录后跳转到另外一个域的页面 怎么正确获取cookie 求大牛指点
Javis486 2014-09-04
  • 打赏
  • 举报
回复
引用 楼主 jiangpeng59 的回复:
比如我成功Post登录了百度,但是还想继续进行签到或者发帖的操作。 我试了把3次Response返回的Cookie都保存了在了一个CookieCollection,最后用带上这个Cookie的Get方法访问了http://zhidao.baidu.com/uhome 但还是处于未登录状态? 下面是登录百度的代码:
 static void Main(string[] args)
        {
            HttpWebRequest request = (HttpWebRequest)WebRequest.Create("https://passport.baidu.com/v2/api/?getapi&class=login&tpl=mn&tangram=true");
            HttpWebResponse response = (HttpWebResponse)request.GetResponse();
            var cookie = response.Headers[HttpResponseHeader.SetCookie];
            request.Abort();
            response.Close();

            request = (HttpWebRequest)WebRequest.Create("https://passport.baidu.com/v2/api/?getapi&class=login&tpl=mn&tangram=true");
            request.Headers[HttpRequestHeader.Cookie] = cookie;
            response = (HttpWebResponse)request.GetResponse();
            StreamReader sr = new StreamReader(response.GetResponseStream());
            string content = sr.ReadToEnd();
            string token = CutBetween(content, "bdPass.api.params.login_token=\'", "\';");
            sr.Close();
            request.Abort();
            response.Close();

            string UserName = "jiangpeng59@qq.com";
            string Password = "jp1992529";
            request = (HttpWebRequest)WebRequest.Create("https://passport.baidu.com/v2/api/?login");

            request.Method = "POST";
            request.ContentType = "application/x-www-form-urlencoded";
            request.KeepAlive = true;
            request.ProtocolVersion = HttpVersion.Version10;

            string PostData = "ppui_logintime=" + GetFiveRandomNum() + "&charset=utf-8&codestring=" +
                "&token=" + token + "&isPhone=false&index=0&u=&safeflg=0&staticpage=http%3A%2F%2Fwww.baidu.com%2Fcache%2Fuser%2Fhtml%2Fjump.html&loginType=1&tpl=mn&callback=parent.bdPass.api.login._postCallback" +
                "&username=" + UserName + "&password=" + Password + "&verifycode=&mem_pass=on";
            byte[] Data = Encoding.UTF8.GetBytes(PostData);
            request.Headers[HttpRequestHeader.Cookie] = cookie;
            Stream s = request.GetRequestStream();
            s.Write(Data, 0, Data.Length);
            s.Close();
            response = (HttpWebResponse)request.GetResponse();
            using (StreamReader read = new StreamReader(response.GetResponseStream(), Encoding.UTF8))
            {
                Console.Write(read.ReadToEnd());
            }
            Console.ReadKey(); 
        }
结果:
就是那个Url吗?
devmiao 2014-09-04
  • 打赏
  • 举报
回复
用fiddler看看附加的cookie是否完整,正确。
失落的神庙 2014-09-04
  • 打赏
  • 举报
回复
登录成功后会返回一个链接 需要get这个链接获取cookie 然后才去进行发帖什么的

110,534

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧