使用C#登录https站点

Bal*_*004 5 c#

我正在尝试编写一个登录Verizon网站的小程序,然后检查该月剩余的分钟数.我需要帮助找出如何使用C#登录网站.我知道我需要使用webrequest发布登录信息,但我不知道如何去做.登录表单的网站是https://login.verizonwireless.com/amserver/UI/Login,但我不确定我要发布到网站登录的信息以及如何操作.以下是我发现的网站来源.如果有人可以帮我弄清楚如何从C#程序登录,我将非常感激.感谢您的任何帮助.

形式方法= "POST"自动填充= "关"动作= "https://login.verizonwireless.com:443/amserver/UI/Login"名称= "登录表单" ID = "登录表单"的onsubmit ="返回disableBut(); ">
输入类型="隐藏"名称= "域"值= "VZW"/>
输入类型= "隐藏"名称= "GOTO"值= ""/>
输入类型= "隐藏"名称= "gotoOnFail"值= ""/>
输入类型= "隐藏"名称= "gx_charset"值= "UTF-8"/>
输入类型= "隐藏"名称= "rememberUserNameCheckBoxExists"值= "Y"/>
H2风格="填充左: 0px;">登录我的Verizon
div class ="clear10">/div>

por*_*ges 2

首先,您缺少两个重要字段:) 如果您查看 HTML,就会发现表单中还有两个附加字段 — IDToken1(用户名)和IDToken2(密码)。

如果您将这些提供给 POST 请求,您应该会得到一些 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());
    }
}
Run Code Online (Sandbox Code Playgroud)