2009-09-22 147 views
4

我试图通过提供我的(正确的)用户名和密码登录到网站。C#WebClient登录网站

下面的代码:

 string URL = @"https://www.t-mobile.co.uk/service/your-account/login/"; 

     string username = "a_user"; 
     string password = "a_password"; 
     //ServicePointManager.Expect100Continue = false; 

     CookieAwareClient client = new CookieAwareClient(); 


     NameValueCollection postData = new NameValueCollection(); 
     postData.Add("username", username); 
     postData.Add("password", password); 

     byte[] response = client.UploadValues(URL, postData); 

     ASCIIEncoding enc = new ASCIIEncoding(); 
     string Source = enc.GetString(response); 

不过,惊喜惊讶的是,它没有登录。我只是回到登录页面。

任何帮助将不胜感激,这是我的头在现在!

感谢, 吉姆

为了完整这里是我的WebClient类 -

public class CookieAwareClient : WebClient 
{ 
    private CookieContainer m_container = new CookieContainer(); 
    protected override WebRequest GetWebRequest(Uri address) 
    { 
     WebRequest request = base.GetWebRequest(address); 
     if (request is HttpWebRequest) 
     { 
      (request as HttpWebRequest).CookieContainer = m_container; 
     } 
     return request; 
    } 
} 
+0

如果你调试过,你是否看到任何类型的异常从服务器回来? – Lazarus 2009-09-22 11:40:26

+0

Hello Lazarus,不 - “Source”的值是同一个登录页面,并且没有例外。 – BIDeveloper 2009-09-22 11:48:44

回答

2

这是在服务器上发布,如果你尝试在浏览器登录:

org.apache.struts.taglib.html.TOKEN = 81243ce1a02ff285745f7c25b86234a9 & showLogin =真&升级= &用户名=用户名密码& =密码& submit = Log +

尝试添加这些值以及如何生成TOKEN。

编辑:检查页面给你的cookie是否也被提交回来。

ANOTHER编辑:太看(= Firefox)的,当你提出请求或发布数据使用LiveHttpHeaders插件是怎么回事,服务器和浏览器之间。

+0

Grega, 谢谢你 - 这就是解决了 - 虽然我还没有机会制定出令牌是什么,但 - 我现在就查。 感谢您的帮助! 一件事,你是怎么制定出什么别的渐渐构成? 再次感谢, 吉姆 – BIDeveloper 2009-09-22 12:03:00

0

我看到1个最初的问题,你张贴回页面url而不是提交URL(它有一个会话ID,并在我的代码中,我会检查有效的会话ID)。还有一个JavaScript函数在提交'processSaveUserCh()'之前调用,它为用户名创建一个cookie。忽略任何这些可能会阻止您成功登录,这是一个恐惧的实验和发现练习。

0

另外我注意到,每次创建CookieAwareClientn类时都会创建一个新的CookieContainer。这意味着您的Cookie不会在请求之间保存。使该成员成为静态的,以便始终使用相同的cookiecontainer。

也像其他人说的,你将不得不尝试。我所做的是,我下载并安装Firebug,并查看浏览器发送的请求/响应以及头文件等。然后,我使用HttpWebRequest/WebClient复制相同的请求。