Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 19.04.2017, 18:44   #1
Ship_1
Форумчанин
 
Регистрация: 10.02.2014
Сообщений: 526
По умолчанию WinInet и локализация ответа - как получить русский?

Здравствуйте!
Получаю страницу через WinInet вот таким путём
Код:
//========== получение кода страницы ==========
    hInet := InternetOpen('My Agent', INTERNET_OPEN_TYPE_PRECONFIG, nil, nil, 0);
    if not Assigned(hInet) then
      raise Exception.Create('Ошибка при выполнении функции InternetOpen' + sLineBreak + SysErrorMessage(GetLastError));
    try
      hCon := InternetConnect(hInet, PAnsiChar('192.168.0.'+printer_nom), INTERNET_DEFAULT_HTTP_PORT, nil, nil, INTERNET_SERVICE_HTTP, 0, 0);
      if not Assigned(hCon) then
        raise Exception.Create('Ошибка при выполнении функции InternetConnect' + sLineBreak + SysErrorMessage(GetLastError));
      try
        if ochered then hReq := HttpOpenRequest(hCon, 'GET', 'pages/_jobusr.htm', HTTP_VERSION, nil, nil, INTERNET_FLAG_KEEP_CONNECTION or INTERNET_FLAG_RELOAD, 0)
                   else hReq := HttpOpenRequest(hCon, 'GET', '', HTTP_VERSION, nil, nil, INTERNET_FLAG_KEEP_CONNECTION or INTERNET_FLAG_RELOAD, 0);
        if not Assigned(hReq) then
          raise Exception.Create('Ошибка при выполнении функции HttpOpenRequest' + sLineBreak + SysErrorMessage(GetLastError));
        try
          HttpSendRequest(hReq,'', 0, nil, 0);
          StatusSize := SizeOf(Status);
          Index := 0;
          HttpQueryInfo(hReq, HTTP_QUERY_FLAG_NUMBER or HTTP_QUERY_STATUS_CODE, @Status, StatusSize, Index);
          if Status <> HTTP_STATUS_OK then
            raise Exception.Create('Ошибка при выполнении функции HttpSendRequest' + sLineBreak + 'Статус: ' + IntToStr(Status) + sLineBreak + SysErrorMessage(GetLastError));
          posi := 1;
          b := 1;
          ResponseString := '';
          while b > 0 do begin
            if not InternetQueryDataAvailable( hReq, bytes, 0, 0 ) then
              raise Exception.Create('Ошибка при выполнении функции InternetQueryDataAvailable' + sLineBreak + SysErrorMessage(GetLastError));
            SetLength( ResponseString, Length(ResponseString) + bytes );
            InternetReadFile( hReq, @ResponseString[Posi], bytes, b );
            Inc(Posi, b);
          end;
        finally
          InternetCloseHandle(hReq);
        end;
      finally
        InternetCloseHandle(hCon);
      end;
    finally
      InternetCloseHandle(hInet);
    end;
//========== конец получения кода страницы ==========

    Result := TStringList.Create;
    Result.Text := utf8toansi(ResponseString);
Обычно всё было нормально. Но вот неожиданно с одной страницей натолкнулся на проблемку. Если смотрю страницу через Хром - она на русском и в "шапке"
Цитата:
<html lang="ru"
Но когда получаю через программу - она английская, и в "шапке", соответственно,
Цитата:
<html lang="en"
.
Может кто-нибудь подсказать что мне сюда добавить, чтоб ответ возвращался как в Хроме, на русском?
Ship_1 вне форума Ответить с цитированием
Старый 20.04.2017, 09:57   #2
Ship_1
Форумчанин
 
Регистрация: 10.02.2014
Сообщений: 526
По умолчанию

Никто не знает?
А IdHttp вообще выдал ошибку "неизвестный протокол"...

P.S. Страница из локальной сети, веб-интерфейс устройства

Последний раз редактировалось Ship_1; 20.04.2017 в 10:15.
Ship_1 вне форума Ответить с цитированием
Старый 20.04.2017, 10:37   #3
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,695
По умолчанию

В заголовках укажите Accept-Language
p51x вне форума Ответить с цитированием
Старый 20.04.2017, 12:25   #4
Aliens_wolfs
Форумчанин
 
Регистрация: 16.12.2009
Сообщений: 902
По умолчанию

http://www.programmersforum.ru/showt...=306324&page=4 пост#32 там пример на WinInet с заполнением заголовка
Aliens_wolfs вне форума Ответить с цитированием
Старый 20.04.2017, 13:56   #5
Ship_1
Форумчанин
 
Регистрация: 10.02.2014
Сообщений: 526
По умолчанию

Спасибо! Всё получилось!
Код:
var
  ....
  headers: string;
begin
  ....
          headers:='Accept-Language: ru-RU,ru;q=0.9,en;q=0.8';
          HttpSendRequest(hReq, PChar(headers), Length(headers), nil, 0);
  ....
end;
Ship_1 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помощь с программой тестом на Delphi. Не знаю как сделать чтобы был выбор ответа и определение верного/не верного ответа и итог? KiberVioNet Lazarus, Free Pascal, CodeTyphon 7 30.09.2015 09:02
Получить сайт https через WinInet Ship_1 Общие вопросы Delphi 3 23.07.2015 19:22
WinInet ('GET') = Иероглифы. Как починить? trafbite Работа с сетью в Delphi 1 19.04.2012 09:02
WinInet работает не так как нужно! 1234567852 Win Api 7 26.02.2012 19:45
Локализация программы через INI, локализация диалоговых сообщений? Человек_Борща Общие вопросы Delphi 1 13.08.2010 13:57