我正在尝试通过提供我的(正确的)用户名和密码登录网站。
以下是代码:
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 :(得分: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复制相同的请求。