首先,您缺少两个重要的字段:)如果您查看 HTML,就会发现表单中还有两个附加字段 —IDToken1
(这是用户名),以及IDToken2
(这是密码)。
如果您将这些提供给 POST 请求,您should取回一些 cookie,然后您可以在后续请求中使用它们。这些会将您识别为登录用户。
当然,我无法完全测试这一点,因为我没有有效的登录,但这是一个开始:
class VerizonLogin
{
CookieContainer Cookies = new CookieContainer();
void Main()
{
Login("test","testpass");
// Now the cookies in "Cookies" are all set.
// Ensure you set CookieContainer on all subsequent requests
}
void Login(string username, string password)
{
var wr = (HttpWebRequest)WebRequest.Create("https://login.verizonwireless.com:443/amserver/UI/Login");
wr.Method = "POST";
wr.ContentType = "application/x-www-form-urlencoded";
wr.Referer = "https://login.verizonwireless.com/amserver/UI/Login"; // my tests show this is needed
wr.CookieContainer = Cookies;
var parameters = new Dictionary<string,string>{
{"realm", "vzw"},
{"goto",""},
{"gotoOnFail",""},
{"gx_charset", "UTF-8"},
{"rememberUserNameCheckBoxExists","Y"},
{"IDToken1", username},
{"IDToken2", password}
};
using (var requestStream = wr.GetRequestStream())
using (var writer = new StreamWriter(requestStream,Encoding.UTF8))
writer.Write(ParamsToFormEncoded(parameters));
using (var response = (HttpWebResponse)wr.GetResponse())
{
// here you need to detect a correct login... this might be one of the cookies.
// if incorrect throw an exception or something.
}
}
string ParamsToFormEncoded(Dictionary<string,string> parameters)
{
return string.Join("&", parameters.Select(kvp =>
Uri.EscapeDataString(kvp.Key).Replace("%20","+") + "=" + Uri.EscapeDataString(kvp.Value).Replace("%20","+")
).ToArray());
}
}