Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/303.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# 通过WebRequest C登录到页面_C#_Http_Login_Webrequest - Fatal编程技术网

C# 通过WebRequest C登录到页面

C# 通过WebRequest C登录到页面,c#,http,login,webrequest,C#,Http,Login,Webrequest,我正在尝试下载一个必须登录到网站的文件。我正在使用,但这不起作用。作为请求的结果,我得到的不是文件而是下载页面。在下载页面上有两种不同的形式,一种是我需要的高级会员资格,另一种是带验证码的免费下载。也许这就是问题所在,存在两个提交按钮 登录方式: CookieContainer container; var request = (HttpWebRequest)WebRequest.Create(loginPageAddress);

我正在尝试下载一个必须登录到网站的文件。我正在使用,但这不起作用。作为请求的结果,我得到的不是文件而是下载页面。在下载页面上有两种不同的形式,一种是我需要的高级会员资格,另一种是带验证码的免费下载。也许这就是问题所在,存在两个提交按钮

登录方式:

            CookieContainer container;

            var request = (HttpWebRequest)WebRequest.Create(loginPageAddress);

            request.Method = "POST";
            request.ContentType = "application/x-www-form-urlencoded";
            var buffer = Encoding.ASCII.GetBytes(loginData.ToString());
            request.ContentLength = buffer.Length;
            var requestStream = request.GetRequestStream();
            requestStream.Write(buffer, 0, buffer.Length);
            requestStream.Close();

            container = request.CookieContainer = new CookieContainer();

            var response = request.GetResponse();
            //response.Close();
            CookieContainer = container;
            return response.GetResponseStream();  //this returns a login page
用法:

                var loginAddress = url;
                var loginData = new NameValueCollection
                    {
                      { "frm-downloadDialog-loginForm-username", "username" },
                      { "frm-downloadDialog-loginForm-password", "password" }
                    };


                var client = new CookieAwareWebClient();
                client.Login(loginAddress, loginData);
登录页面:

<input type="text" name="username" class="text" id="frm-downloadDialog-loginForm-username" required="" data-nette-rules="[{&quot;op&quot;:&quot;:filled&quot;,&quot;msg&quot;:&quot;Username required.&quot;}]" value="">
<input type="password" name="password" class="text" id="frm-downloadDialog-loginForm-password" required="" data-nette-rules="[{&quot;op&quot;:&quot;:filled&quot;,&quot;msg&quot;:&quot;Password required.&quot;}]">
<input type="submit" name="login" class="button" id="frm-downloadDialog-loginForm-login" value="Submit">

我建议使用Fiddler并将您创建和发送的请求与您访问网站并单击提交按钮时发出的请求进行比较。请确保还比较了请求的标题。好的,我发现该请求包含用户名、密码和一些令牌,一些ID,但我找不出它们代表什么。。。提交按钮具有根据请求生成的令牌值。有没有一种方法可以在请求时找到这个令牌值?没有,但我正在做类似的事情-下面是我在代码中所做的:首先,获取一个webclient以打开登录页面-一个简单的get。这将设置饼干和你不知道的东西。之后,使用相同的cookie容器发送POST请求。我从一个实际的帖子中修改了请求主体,并替换了需要替换的内容。然后在POST请求的RequestStream中设置主体。好的,我可以通过WebBrowser控件登录,并且可以通过WebBrowser下载文件。但有没有办法通过WebBrowser控件获得文件的直接链接并取消下载?你是说登录后下载会自动开始?在这种情况下,我将研究HttpWebRequest.AllowAutoRedirect=false。然后,您可以从页面HTML Agility pack中获取下载URL,或者在重定向的情况下读取响应的标题。