gpt4 book ai didi

c# - 使用C#登录https站点

转载 作者:太空狗 更新时间:2023-10-29 23:34:35 25 4
gpt4 key购买 nike

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

form method="post" autocomplete="off" action="https://login.verizonwireless.com:443/amserver/UI/Login" name="loginForm" id="loginForm" onsubmit="return disableBut();">
input type="hidden" name="realm" value="vzw" />
input type="hidden" name="goto" value="" />
input type="hidden" name="gotoOnFail" value="" />
input type="hidden" name="gx_charset" value="UTF-8" />
input type="hidden" name="rememberUserNameCheckBoxExists" value="Y" />
h2 style="padding-left:0px;">Sign In to My Verizon
div class="clear10"> /div>

最佳答案

首先,您遗漏了两个重要字段 :) 如果您查看 HTML,表单中还有两个附加字段 — IDToken1(即用户名)和 IDToken2(即密码)。

如果您将这些提供给 POST 请求,您应该取回一些 cookie,然后您可以在后续请求中使用这些 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());
}
}

关于c# - 使用C#登录https站点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4839918/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com