Не работает задать Accept-Language в webbrowser c#

250
23 января 2018, 08:53

Пробовал открыть некоторые сайты(facebook, openstreetmap, instagram) в webbrowser с передачей POST запроса. Пробовал различные варианты и языки.

"Accept-Language: ru-RU,ru;q=0.9,en-US;q=0.8,en;q=0.7"

Это функция не работает совсем? Пытался передать и POST со всеми параметрами такими как Accept, Cache-Control, User-Agent. Не выходит кто подскажет, кто поможет. Уже 2 день копаюсь не выходит.

        string h = "Accept-Language: ru-RU";
        mapWebViewer.Navigate("https://www.instagram.com", "", null, h);
Answer 1

Различные сайты по-разному определяют язык, на котором необходимо возвращать контент сайта пользователю. Некоторые сайты действительно смотрят на содержимое заголовка "Accept-Language".

Конкретно на примере сайта instagram.com, по умолчанию пользователю выдается страница локализованная в зависимости от местоположения\региона. Однако выдаваемый язык интерфейса можно переопределив передав с запросом в Cookie с именем "ig_lang" двухбуквенный код локали(ru, en, fr, и т.д.).

WebBrowser из System.Windows.Forms не имеет API позволяющего задавать Cookie перед запросом. Однако используя механизм P/Invoke можно задать Cookie следующим образом:

[DllImport("wininet.dll", CharSet = CharSet.Auto, SetLastError = true)]
static extern bool InternetSetCookie(string lpszUrlName, string lpszCookieName, string lpszCookieData);
private void Load() {
    var url = "https://www.instagram.com";
    var langCookie = new Cookie("ig_lang", "en", "", "/") { Expires = DateTime.Now.AddDays(1) };
    InternetSetCookie(url, null, langCookie.ToString());
    webBrowser1.Navigate(url, "", null, "");
}
READ ALSO
Что такое Hangfire? [требует правки]

Что такое Hangfire? [требует правки]

Что такое Hangfire? Можна на примере пожайлуста показать

300
webkitDisplayingFullscreen аналоги

webkitDisplayingFullscreen аналоги

Собственно не смог найти аналоги этого состояния в других браузерах, подскажите пожалуйстаИнтересует Firefox и Edge

305
Паттерн “Модуль”

Паттерн “Модуль”

В книжке «Паттерны для масштабируемых JavaScript-приложений» в разделе, где описывается паттерн "Модуль", написано, что модуль, в отличие от IIFE возвращает...

293
Кнопка очистки всех полей формы

Кнопка очистки всех полей формы

Есть обычная формаЗначения сохраняются в сессии и не удаётся её очистить при помощи стандартного <input type="reset" />

306