Я не могу добавить авторизацию на сайт с помощью WebClient - PullRequest
0 голосов
/ 13 ноября 2018

У меня есть проблема.Я должен добавить авторизацию на сайте и затем выполнить анализ информации.

Я решил проблему с помощью webBrowser, но хочу сделать это с помощью webClient или HttpClient

HTML code

<form role="form" method="POST">
    <div class="form-row">
        <input type="text" id="userLogin" required="required"
                            name="username" placeholder="Username" autofocus="autofocus">
    </div>
    <div class="form-row">
        <input type="password" id="userPassword" required="required" 
                            name="password" placeholder="Password">
    </div>
<div class="btns-row">
                <span class="forgot-pwd"><a href="/app/recoverPassword/">Forget password?</a></span>
                <button id="userSignIn" class="btn" type="submit">Enter</button>
            </div>
        </div>
        <input type="hidden" id="urlParams" name="params" />
    </form>

Я пытался сделать это, но он не работает

private void button3_Click(object sender, EventArgs e)
{

    using (var webClient = new CookieAwareWebClient())
    {
        //webClient.Headers[HttpRequestHeader.ContentType] = "application/x-www-form-urlencoded";
        webClient.UploadString("http://server/app/login/", "username=user1&password=pass1");
        //webClient.Headers.Remove(HttpRequestHeader.ContentType);

        string answer = webClient.DownloadString("http://server/app/obj/");
        richTextBox1.AppendText(answer);

    }



}

Класс Cookie

public class CookieAwareWebClient : WebClient
{
    public void Login(string loginPageAddress, NameValueCollection loginData)
    {
        CookieContainer container;

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

        request.Method = "POST";
        request.ContentType = "application/x-www-form-urlencoded";

        var query = string.Join("&",
          loginData.Cast<string>().Select(key => $"{key}={loginData[key]}"));

        var buffer = Encoding.ASCII.GetBytes(query);
        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;
    }

    public CookieAwareWebClient(CookieContainer container)
    {
        CookieContainer = container;
    }

    public CookieAwareWebClient()
      : this(new CookieContainer())
    { }

    public CookieContainer CookieContainer { get; private set; }

    protected override WebRequest GetWebRequest(Uri address)
    {
        var request = (HttpWebRequest)base.GetWebRequest(address);
        request.CookieContainer = CookieContainer;
        return request;
    }
}

Можете ли вы помочь мне, как сделать авторизацию на сайте с помощью webClient или HttpClient?

...