C# 登录到.aspx web表单并查看http响应
有一个网站的.aspx页面包含一个登录表单 我想用我的凭据登录到这个网站,检索http响应并在控制台中打印出来 我对包含帖子的标准html表单也做了同样的处理,但是这个页面源代码中没有帖子。我不知道如何继续 以下是登录表单来源:C# 登录到.aspx web表单并查看http响应,c#,asp.net,C#,Asp.net,有一个网站的.aspx页面包含一个登录表单 我想用我的凭据登录到这个网站,检索http响应并在控制台中打印出来 我对包含帖子的标准html表单也做了同样的处理,但是这个页面源代码中没有帖子。我不知道如何继续 以下是登录表单来源: <td width="370" class="loginScreenBox"> <table width="100%" border="0" cellspacing="3" cellpadding="3">
<td width="370" class="loginScreenBox">
<table width="100%" border="0" cellspacing="3" cellpadding="3">
<tr>
<td class="heading" colspan="2" style="text-align: center;">
Existing Partner
</td>
</tr>
<tr>
<td style="text-align: right;">
Enter group reference number:
</td>
<td>
<input name="_ctl1:userName" type="text" id="_ctl1_userName" />
</td>
</tr>
<tr>
<td style="text-align: right;">
Password:
</td>
<td>
<input name="_ctl1:passWord" type="password" id="_ctl1_passWord" />
</td>
</tr>
<tr>
<td colspan="2" style="text-align: center; padding-bottom: 15px;">
<input type="submit" name="_ctl1:btnLogin" value="Login" id="_ctl1_btnLogin" class="btn" />
</td>
</tr>
</table>
</td>
现有合伙人
输入组参考号:
密码:
该网站已使用您的URL进行了测试(更新),并且我的登录被拒绝(我没有凭据:),因此它肯定能正常工作:
var request = (HttpWebRequest)HttpWebRequest.Create("http://hoteladmin.laterooms.com/en/SignIn.aspx?ReturnUrl=%2fmain.aspx");
var container = new CookieContainer();
//
request.CookieContainer = container;
//
var response = request.GetResponse();
var bufferIntitial = new byte[512];
string responseTextInitial = "";
using (var responseStream = response.GetResponseStream())
{
while (responseStream.Read(bufferIntitial, 0, 512) > 0)
{
responseTextInitial += Encoding.UTF8.GetString(bufferIntitial);
}
}
/// NEW REQUEST
var loginRequest = (HttpWebRequest)HttpWebRequest.Create("http://hoteladmin.laterooms.com/en/SignIn.aspx?ReturnUrl=%2fmain.aspx");
// Resuse the cookie container containing the cookies received from our initial request.
loginRequest.CookieContainer = container;
var requestFormData = new StringBuilder();
requestFormData.Append("__VIEWSTATE=" + HttpUtility.HtmlEncode(ExtractViewState(responseTextInitial)) + "&");
requestFormData.Append("_ctl1:userName=" + HttpUtility.HtmlEncode("user123") + "&");
requestFormData.Append("_ctl1:userPass=" + HttpUtility.HtmlEncode("pass123") + "&");
requestFormData.Append("_ctl1:btnLogin=" + HttpUtility.HtmlEncode("Login"));
var requestFormDataByte = Encoding.ASCII.GetBytes(requestFormData.ToString());
loginRequest.UserAgent = "Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/29.0.1547.57 Safari/537.36";
loginRequest.Method = "POST";
loginRequest.ContentLength = requestFormDataByte.Length;
loginRequest.ContentType = "application/x-www-form-urlencoded";
using (var requestStream = loginRequest.GetRequestStream())
{
requestStream.Write(requestFormDataByte, 0, requestFormDataByte.Length);
}
var loginResponse = loginRequest.GetResponse();
var buffer = new byte[512];
string responseText = "";
using (var responseStream = loginResponse.GetResponseStream())
{
while (responseStream.Read(buffer, 0, 512) > 0)
{
responseText += Encoding.UTF8.GetString(buffer);
}
}
辅助功能:
private static string ExtractViewState(string s)
{
string viewStateNameDelimiter = "__VIEWSTATE";
string valueDelimiter = "value=\"";
int viewStateNamePosition = s.IndexOf(viewStateNameDelimiter);
int viewStateValuePosition = s.IndexOf(valueDelimiter, viewStateNamePosition);
int viewStateStartPosition = viewStateValuePosition + valueDelimiter.Length;
int viewStateEndPosition = s.IndexOf("\"", viewStateStartPosition);
return s.Substring(viewStateStartPosition, viewStateEndPosition - viewStateStartPosition);
}
你能发布整个页面吗?如果你在该页面上查看源代码,你可以准确地看到它试图发布登录信息的位置。谢谢你的回答。不幸的是,我在网站上尝试了这个,它只返回相同的登录页面。我已经上传了我的问题以及相关页面的链接,如果您有几分钟的时间,我将非常感谢您的帮助。当然,我已经在您的代码中输入了适当的用户名、密码和URL。@user2018084:您可能还需要保留任何cookie和/或_VIEWSTATE值。换句话说,首先请求页面,抓取任何cookies/viewstate,并将该信息连同表单字段一起提交。@user2018084-请查看上面的编辑,它可以被清理很多,但你知道Chris在说什么。