Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/311.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 登录到.aspx web表单并查看http响应_C#_Asp.net - Fatal编程技术网

C# 登录到.aspx web表单并查看http响应

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">

有一个网站的.aspx页面包含一个登录表单

我想用我的凭据登录到这个网站,检索http响应并在控制台中打印出来

我对包含帖子的标准html表单也做了同样的处理,但是这个页面源代码中没有帖子。我不知道如何继续

以下是登录表单来源:

<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在说什么。