Как объединить для формирования одного HttpContent при отправке PostAsync - PullRequest
0 голосов
/ 04 января 2019

Как я могу отправить два HttpContent другого типа? (FormUrlEncodedContent (для тела) и StringContent (для дополнительных заголовков))

Я пытаюсь получить доступ к локальному серверу с помощью httpclient с POST (вход в систему)для соскоба HTML.

На этом сервере вам необходимо постоянно сохранять действительный файл cookie, в противном случае он будет считаться тайм-аутом, и вам придется начинать заново с экрана входа в систему.

Итаксначала нам нужно получить к нему доступ с помощью запроса GET, получить и сохранить файл Cookie, а затем выполнить запрос POST.

        var parameter1 = new FormUrlEncodedContent(new Dictionary<string, string>{
            {"param1","***" },
            {"action","login" },
            {"param2",null } //login form
            );
        var parameter2 = new StringContent("en-GB,en;q=0.9,ja;q=0.8", new UTF8Encoding(), "Accept-Language"); //got locale related error so setting accept-language

        var parameter3 = new StringContent(cookie2b.ToArray()[0],new UTF8Encoding(), "Cookie") //cookies

       //I know HttpContent is abstract so you can absolutely not do this, but hope this conveys my gist
        HttpContent hc = parameter1 + parameter2 + parameter3;

            var response = httpclient.PostAsync(url, hc).Result;
            var responseContent = response.Content.ReadAsStringAsync();
            Console.WriteLine(await responseContent);

            using (FileStream fs = File.Create(@"~/random.html"))
            {
                AddText(fs, await responseContent);
            }

[Ожидается] Войдите в систему, как ожидается, и получите html в указанном файле.

[Что происходит] Я понятия не имею, как, но получаю следующую ошибку на стороне сервера при попытке только с параметром 1: javax.servlet.jsp.JspException: В не удается установить локаль синтаксического анализа

* Сервер является внутренним, но не под моим контролем, плюс я прекрасно вижу страницу в своем браузере, поэтому я хочу исправить некоторые изменения в моем коде, а не на сервере.

1 Ответ

0 голосов
/ 04 января 2019

httpclient.DefaultRequestHeaders.AcceptLanguage = "некоторая локаль"

И вы можете увидеть, как добавить куки в ваш запрос:

Как мне установить куки в HttpClient's HttpRequestMessage

Выполните эти шаги перед асинхронной публикацией, и это должно помочь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...