C#Web客户端登录到网站(C# WebClient Log onto Website)

2019-07-18 23:28发布

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

下面的代码:

        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;
    }
}

Answer 1:

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

org.apache.struts.taglib.html.TOKEN = 81243ce1a02ff285745f7c25b86234a9&showLogin =真升级= =用户名用户名和密码=密码&提交=记录+中

尝试添加了这些值,并找出如何生成令牌。

编辑:检查饼干该页给您submited回来了。

第二个编辑:太多看是怎么回事,服务器和浏览器(火狐=)之间,当你提出请求或发布数据使用的LiveHTTPHeaders插件。



Answer 2:

你可以尝试添加一个用户代理,如:

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

有时,网站要保证一定的浏览器使用和/或假装是人类。



Answer 3:

我看到1个最初的问题,您是回发到网页网址,而不是提交URL(其上有一个会话ID,并在我的代码我会检查有效的会话ID)。 还有一个提交“processSaveUserCh()”,这是创造用户名一个cookie之前调用javascript函数。 任何这样做的遗漏可能会阻止你成功登录,这是一个实验,发现锻炼我害怕。



Answer 4:

此外,我注意到你正在创建每次创建CookieAwareClientn上课时间一个新的CookieContainer。 这意味着你的Cookie也不会被保存请求之间。 让该成员的静态,让你使用相同的CookieContainer始终。

另外像其他的说,你必须尝试。 我做的是,我下载并安装Firebug的,看看如何请求/响应beingn由浏览器发送,标题一起,等等。然后我重复使用的HttpWebRequest / Web客户端相同的请求。



文章来源: C# WebClient Log onto Website