C#WebRequest - 使用随机生成的令牌

时间:2017-12-19 01:14:27

标签: c# .net webforms webrequest webresponse

我正在尝试登录www.autoscout24.de并检索添加和消息。登录表单具有随机生成的隐藏输入/令牌。作为C#的新手,我阅读了有关使用C#登录网站的不同内容,我发现的只是简单的代码,只能在简单的登录表单中使用(用户:密码)。我想象了一个两步的方法:首先发出一个GET请求来检索所需的数据和一个带有登录凭据和其他需要的推文的POST请求。使用HtmlAgilityPack我已经通过了第一步,但第二个请求只是再次返回登录页面而不是“我的帐户”页面。 我的代码:

using System;
using System.IO;
using System.Net;
using System.Text;

namespace WebRequest__custom
{
    class Program
    {
        static void Main(string[] args)
        {
            CookieContainer _cookies;
            HttpWebRequest request = (HttpWebRequest)WebRequest.Create("https://angebot.autoscout24.de/login?fromNavi=myAS24");
            WebResponse _response = request.GetResponse();
            Stream stream = _response.GetResponseStream();
            StreamReader strReader = new StreamReader(stream);

            string _cookiesHeader = _response.Headers["Set-cookie"];
            _cookies = request.CookieContainer;
            string _content = strReader.ReadToEnd();
            //Console.WriteLine(_content.Substring(0,500));

            var _dom = new HtmlAgilityPack.HtmlDocument();
            _dom.LoadHtml(_content);

            // Get POST link
            var _postLinkNode = _dom.DocumentNode.SelectSingleNode("//*[@id='loginForm']/div[3]/form");
            var postLink = _postLinkNode.Attributes["action"].Value;
            //Console.WriteLine(postLink);

            //get Token
            var _tokenNode = _dom.DocumentNode.SelectSingleNode("//*[@id='loginForm']/div[3]/form/input");
            var token = _tokenNode.Attributes["value"].Value;
            //Console.WriteLine(token);

            // Start login request
            HttpWebRequest requestLogin = (HttpWebRequest)WebRequest.Create("https://accounts.autoscout24.com"+ postLink);

            requestLogin.ContentType = "application/x-www-form-urlencoded";
            requestLogin.Method = "POST";
            requestLogin.KeepAlive = true;
            requestLogin.AllowAutoRedirect = true;

            string postData = "&__RequestVerificationToken=" + token;
            postData += "&Username=web-cppxt@mail-tester.com";
            postData += "&Password=Qwert123!";
            postData += "&RememberMeCheckBox=on&RememberMe=true";

            byte[] _bytes = Encoding.UTF8.GetBytes(postData);
            requestLogin.ContentLength = _bytes.Length;
            requestLogin.CookieContainer = _cookies;
            using(Stream sr = requestLogin.GetRequestStream())
            {
                sr.Write(_bytes, 0, _bytes.Length);
            }

            WebResponse loginResponse = requestLogin.GetResponse();
            StreamReader loginStreamReader = new StreamReader(loginResponse.GetResponseStream());
            string secondPage = loginStreamReader.ReadToEnd();



            Console.WriteLine(secondPage.Substring(0,500));
            Console.ReadKey();

        }
    }
}

0 个答案:

没有答案
相关问题