使用C#登录https站点

2024-03-19

我正在尝试编写一个小程序,用于登录 Verizon 网站,然后检查该月还剩多少分钟。我需要帮助了解如何使用 C# 登录该网站。我知道我需要使用 webrequest 来发布登录信息,但我不知道如何去做。带有登录表单的网站是https://login.verizonwireless.com/amserver/UI/Login https://login.verizonwireless.com/amserver/UI/Login,但我不确定必须向网站发布哪些信息才能登录以及如何登录。以下是我在网站上找到的源码。如果有人可以帮助我弄清楚如何从 C# 程序登录,我将不胜感激。感谢您的任何帮助。

表单方法=“发布”自动完成=“关闭” 操作=“https://login.verizonwireless.com:443/amserver/UI/Login”名称=“loginForm”id=“loginForm”onsubmit=“返回disableBut();”>
输入类型=“隐藏”名称=“领域”值=“vzw”/>
输入类型=“隐藏”名称=“转到”值=“”/>
输入类型=“隐藏”名称=“gotoOnFail”值=“”/>
输入类型=“隐藏”名称=“gx_charset”值=“UTF-8”/>
输入类型=“隐藏”名称=“rememberUserNameCheckBoxExists”值=“Y”/>
h2 style="padding-left:0px;">登录我的 Verizon
div 类=“clear10”> /div>


首先,您缺少两个重要的字段:)如果您查看 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());
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用C#登录https站点 的相关文章

随机推荐