首页 新闻 赞助 找找看

asp.net关于自动登陆网站的问题

0
悬赏园豆:100 [已关闭问题]

目前我在系统页面上加了一些链接,比如开心网,校内等等。我把账号密码都保存到数据库中。现在要实现的就是一点链接就登陆到相应的网站中。参考了网上的一些帖子。试了一下倒是能等到首页,但是还有两个问题。
1、登陆后url还是我的本地的http://localhost:2200/test.aspx。
2、登陆后点击主页中的链接都跳转到登陆页了。(我用httpwatch查看需要POST的数据,都传了啊!)
以下是代码,恳请大家看看是什么原因! (以开心网为例)

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Net;
using System.IO;
using System.Text;
using System.Data;
using System.Web.UI.WebControls;
using System.Net.Security;
using System.Security.Authentication;
using System.Security.Cryptography.X509Certificates;
namespace test
{
    public partial class kaixin : System.Web.UI.Page
    {
        public CookieCollection cookie;
        private CookieContainer _CookieContainer = new CookieContainer();
        protected Encoding encode = Encoding.Default;
        protected static string cookieheader;
        protected void Page_Load(object sender, EventArgs e)
        {           
            try
            {
                string LoginUrl = "http://www.kaixin001.com/login/login.php";
                string UserName = "shanba123@yahoo.cn ";
                string UserPwd = "123123";
                string Txt1 = "";
                //定义Cookie容器
                CookieContainer CookieArray = new CookieContainer();
               
                //创建Http请求
                HttpWebRequest LoginHttpWebRequest = (HttpWebRequest)WebRequest.Create(LoginUrl);

                LoginHttpWebRequest.UseDefaultCredentials = true;
                //LoginHttpWebRequest.Proxy = this.getProxy();
               
                //登录数据
                string LoginData = "%2Fhome%2F&email=" + UserName + "&password=" + UserPwd;
                //数据被传输类型
                LoginHttpWebRequest.ContentType = "application/x-www-form-urlencoded";
                LoginHttpWebRequest.Accept = "image/gif,  image/x-xbitmap,  image/jpeg,  image/pjpeg,  application/vnd.ms-powerpoint,  application/vnd.ms-excel,  application/msword,  */*";
                LoginHttpWebRequest.Referer = "http://www.kaixin001.com";
                LoginHttpWebRequest.UserAgent = "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.2; Trident/4.0; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.04506.648; .NET CLR 3.5.21022; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; InfoPath.2; CIBA)";

               
                //数据长度
                LoginHttpWebRequest.ContentLength = LoginData.Length;
                //数据传输方法 get或post
                LoginHttpWebRequest.Method = "POST";
                //设置HttpWebRequest的CookieContainer为刚才建立的那个CookieArray 
                LoginHttpWebRequest.CookieContainer = CookieArray;
                //获取登录数据流
                Stream myRequestStream = LoginHttpWebRequest.GetRequestStream();
                //StreamWriter
                StreamWriter myStreamWriter = new StreamWriter(myRequestStream, Encoding.Default);
                //把数据写入HttpWebRequest的Request流 
                myStreamWriter.Write(LoginData);

                //关闭打开对象   
                myStreamWriter.Close();

                myRequestStream.Close();

                //新建一个HttpWebResponse   
                HttpWebResponse myHttpWebResponse = (HttpWebResponse)LoginHttpWebRequest.GetResponse();

                //获取一个包含url的Cookie集合的CookieCollection   
                myHttpWebResponse.Cookies = CookieArray.GetCookies(LoginHttpWebRequest.RequestUri);

                WebHeaderCollection a = myHttpWebResponse.Headers;

                Stream myResponseStream = myHttpWebResponse.GetResponseStream();

                StreamReader myStreamReader = new StreamReader(myResponseStream, Encoding.UTF8);
                Txt1 = myStreamReader.ReadToEnd();

                //Txt=myStreamReader.ReadToEnd();
                HttpServerUtility h = new HttpServerUtility();
                //h.Execute("", "");
                Response.Write(Txt1);
                Response.End(); 

                //把数据从HttpWebResponse的Response流中读出   
                myStreamReader.Close();
               
                myResponseStream.Close();
           
            }
            catch(Exception ee)
            {

            }
}

我本善良_cq的主页 我本善良_cq | 初学一级 | 园豆:100
提问于:2009-11-26 23:32
< >
分享
其他回答(5)
0

模拟登录?

感觉是HttpWebRquire不能保存交互的Session,可以改用WebBrower试一下吧。

Jetson Lee | 园豆:115 (初学一级) | 2009-11-27 09:37
WebBrower不是winform的控件吗,webform就不能实现吗?
支持(0) 反对(0) 我本善良_cq | 园豆:100 (初学一级) | 2009-11-27 14:17
0

在登录完成后添加:Response.Redirect("http://www.kaixin001.com");

dege301 | 园豆:2825 (老鸟四级) | 2009-11-27 09:58
不行啊!
支持(0) 反对(0) 我本善良_cq | 园豆:100 (初学一级) | 2009-11-27 14:37
0

服务端的代码怎么能行呢?得从前台弄一个form 提交到开心网 吧

调调儿 | 园豆:155 (初学一级) | 2009-11-27 12:15
能详细点吗?呵呵,最好贴下代码。先谢了啊.........
支持(0) 反对(0) 我本善良_cq | 园豆:100 (初学一级) | 2009-11-27 14:39
@我本善良_cq: 前台弄一个form提交是可以但不能保存 cookie和session吧 我已经试验成功用form提交但前提是获取那个form的action
支持(0) 反对(0) 十四 | 园豆:46 (初学一级) | 2009-12-16 15:33
0

同样期待 答案 也在 做相同的调查

十四 | 园豆:46 (初学一级) | 2009-11-27 13:11
错误 3 类型“System.Web.HttpServerUtility”未定义构造函数 C:\Documents and Settings\pc41\桌面\WebSite1\SingleLogin.aspx.cs 64 35 C:\...\WebSite1\ 报错 构造函数未定义 为何???
支持(0) 反对(0) 十四 | 园豆:46 (初学一级) | 2009-11-27 15:42
HttpServerUtility h = new HttpServerUtility(); 这行注释掉
支持(0) 反对(0) 我本善良_cq | 园豆:100 (初学一级) | 2009-11-27 15:45
解决了,注释掉就可以了。。但是 如何确定 那个action 也就是这个程序中 string LoginUrl = "http://www.kaixin001.com/login/login.php"; 从何得到呢? LoginHttpWebRequest.Referer = "http://www.kaixin001.com"; 这个是域名吧!!
支持(0) 反对(0) 十四 | 园豆:46 (初学一级) | 2009-11-27 16:16
@十四:恩,http://www.kaixin001.com/login/login.php这个地址你可以用Httpwatch查看一下。
支持(0) 反对(0) 我本善良_cq | 园豆:100 (初学一级) | 2009-11-28 13:41
0

如果都有同一个cookie应该是可以保持状态的。

Tom-X | 园豆:515 (小虾三级) | 2009-11-27 13:45
我想进入我们公司的OA用这种方式 ,OA 部署在我们公司的服务器上应该是jsp做的!但点首页查看源文件 中首页 有三个form其中一个action="http://202.*.*.*/9000/login/ponx";比较像,进入不了。。我还需要其他哪些方面要注意的呢??
支持(0) 反对(0) 十四 | 园豆:46 (初学一级) | 2009-11-27 16:39
0

1.httpwatch可以看到服务器的吗?不会吧

2.服务器需要维护cookies的状态,这个你没有做到所以不行

3.之间这页面时用form就行了啊,很到导航网站都是这样干的,不需要从服务器上做

LittlePeng | 园豆:3445 (老鸟四级) | 2009-12-05 12:56
有例子吗,发我看看。
支持(0) 反对(0) 我本善良_cq | 园豆:100 (初学一级) | 2009-12-07 13:30
怎么给分啦?+_+
支持(0) 反对(0) 我本善良_cq | 园豆:100 (初学一级) | 2009-12-07 13:36
如果需要维护cookie可以看我以前写的: http://www.cnblogs.com/lulu/archive/2009/11/07/1597971.html 里面的第一段代码··· LiCookie = new List<MyCookie>(); 为cookie容器 每次得到回复的set-cookies之后 修改容器便于下次登录cookie,不过这里初始的cookies也还要自己赋值,这个没有问题,是我在登录一个discuss用的,每次cookies都在变,这样之后就好了:) 如果form的话: <form action="xxxx" method="post"> <input type="text" name="username">//name要根据登陆的网站而定,用httpwatch查看 <input type="text" name="password"> <intpt type="sumit" value="ss"> </form>
支持(0) 反对(0) LittlePeng | 园豆:3445 (老鸟四级) | 2009-12-10 20:23
@jilu:用form的话,那说的这种貌似不行。登陆不了。
支持(0) 反对(0) 我本善良_cq | 园豆:100 (初学一级) | 2009-12-11 15:45
@我本善良_cq: 学习一下人家:http://www.hao123.com/ 有没有看到上面的各种邮箱登陆啊,就是用form做的啊。根本就没有用到服务端。主要的煤油做好而已。就是一个跨站的post。
支持(0) 反对(0) LittlePeng | 园豆:3445 (老鸟四级) | 2009-12-12 11:32
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册