4

我正在尝试通过提供我的(正确的)用户名和密码来登录网站。

这是代码:

        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

4 回答 4

2

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

org.apache.struts.taglib.html.TOKEN=81243ce1a02ff285745f7c25b86234a9&showLogin=true&upgrade=&username=username&password=password&submit=Log+in

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

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

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

于 2009-09-22T11:55:18.503 回答
1

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

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

有时网站想要确保使用某个浏览器和/或假装是人类。

于 2009-09-22T11:48:22.850 回答
0

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

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

于 2009-10-02T15:21:02.433 回答
0

我看到 1 个初始问题,您正在发回页面 url 而不是提交 URL(上面有一个会话 ID,在我的代码中我会检查一个有效的会话 ID)。在提交“processSaveUserCh()”之前还有一个 javascript 函数调用,它为用户名创建 cookie。遗漏任何一个都可能会阻止您成功登录,恐怕这是一个实验和发现练习。

于 2009-09-22T11:53:58.333 回答