C#WebClient登录网站

时间:2009-09-22 11:28:21

标签: c# winforms c#-3.0 webforms 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;
    }
}

4 个答案:

答案 0 :(得分:2)

如果您尝试在浏览器中登录,则会在服务器上发布:

<强> org.apache.struts.taglib.html.TOKEN = 81243ce1a02ff285745f7c25b86234a9&安培; showLogin =真安培;升级=安培;用户名=用户名和安培;密码=密码&安培;在提交=日志+

尝试添加这些值,并弄清楚如何生成TOKEN。

编辑:检查该页面提供给您的cookie是否也被提交。

另一个编辑:当您发出请求或发布数据时,看看服务器和浏览器(= Firefox)之间发生了什么,请使用LiveHttpHeaders插件。

答案 1 :(得分:1)

您可以尝试添加用户代理,例如:

client.Headers.Add("user-agent", "your user agent here");

有时,网站希望确保使用某个浏览器和/或伪装成人类。

答案 2 :(得分:0)

我看到1个初始问题,您要回到页面网址而不是提交URL(其上有会话ID,在我的代码中我将检查有效的会话ID)。在提交'processSaveUserCh()'之前还有一个javascript函数,它为用户名创建一个cookie。遗漏任何这些可能会妨碍您成功登录,这是一项实验并且发现我害怕的运动。

答案 3 :(得分:0)

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

也像其他人说的那样,你将不得不进行实验。我做的是,我下载并安装Firebug,看看浏览器是如何发送请求/响应的,以及标题等。然后我使用HttpWebRequest / WebClient复制相同的请求。