HTTP-запрос работает в почтальоне, но не работает в коде - PullRequest
0 голосов
/ 22 декабря 2018

Я пытаюсь зайти на сайт, который требует авторизации через форму.Я использовал HTTP-клиент Postman.

Я пытался выполнить обычный почтовый запрос http, но, похоже, он не работал, я получил успешный код состояния (200 OK), но он не вошел, в конце концов сделалработать с GET-запросом с параметрами BODY (я не видел GET-запроса с параметрами тела).Ну, я безуспешно пытался смоделировать этот запрос в коде на C #, я даже попробовал сгенерированный код, который Почтальон снова предложил без удачи.Ниже приведен запрос Почтальона и фрагмент кода C # на основе автоматически сгенерированного кода Почтальона.Кто-нибудь знает, есть ли возможность сделать этот запрос с какой-либо библиотекой или есть что-то, что мне не хватает?

Заранее спасибо.

        var client = new RestClient("https://thessalia-3.teilar.gr/login.asp");
        var request = new RestRequest(Method.GET);
        request.AddHeader("cache-control", "no-cache");
        request.AddHeader("Content-Type", "application/x-www-form-urlencoded");
        request.AddHeader("Referer", "https://thessalia-3.teilar.gr/login.asp");

        var parameters = new Dictionary<string, string>();

        parameters["userName"] = JsonConvert.SerializeObject("myusername");
        parameters["pwd"] = JsonConvert.SerializeObject("mypass");
        parameters["loginTrue"] = JsonConvert.SerializeObject("extravalue");

        var content = new FormUrlEncodedContent(parameters);

        request.AddParameter("application/x-www-form-urlencoded", content);
        IRestResponse response = client.Execute(request);
        Console.WriteLine(response.Content);
        Console.WriteLine(response.StatusCode);

Фотография почтальона

Редактировать:

Параметры тела запроса почтальона

Я также пытался запустить это, но не вошел в систему. Автоматически сгенерированная форма кода Почтальон

1 Ответ

0 голосов
/ 22 декабря 2018

Если запрос был успешным (200), и вы получили страницу HTML для «Неверные учетные данные», то ваш код, который выполняет запрос, должен быть в порядке, и проблема связана с учетными данными.Как я уже сказал в своем первом комментарии, не сериализуйте параметры в JSON, вместо этого закодируйте их URL-кодом:

parameters["userName"] = HttpUtility.UrlEncode("myusername");
parameters["pwd"] = HttpUtility.UrlEncode("mypass");
parameters["loginTrue"] = HttpUtility.UrlEncode("extravalue");

Это стандартный способ, который работает с записью параметров непосредственно в поток запросов,или с утилитой типа StringContent.Однако, поскольку вы используете служебный класс FormUrlEncodedContent, он кодирует их для вас, поэтому вам не нужно это делать.В этом случае просто присвойте их непосредственно как строку:

parameters["userName"] = "myusername";
parameters["pwd"] = "mypass";
parameters["loginTrue"] = "extravalue";
...