Форум программистов, компьютерный форум, киберфорум
C/C++: WinAPI
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/6: Рейтинг темы: голосов - 6, средняя оценка - 5.00
8 / 8 / 3
Регистрация: 01.03.2013
Сообщений: 85
1

WinInet получить читаемый ответ

02.08.2015, 16:09. Показов 1128. Ответов 2
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Всем привет,

У кого есть опыт, помогите, пожалуйста, разобраться с решением поставленной задачи.

Есть некий URL (для примера: http://2ip.ru/)
Надо получить заголовки и ответ в виде HTML. Вот решение, написанное мной:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
    HINTERNET hIntSession = InternetOpenA("my_app", INTERNET_OPEN_TYPE_DIRECT, NULL, NULL, 0);
    HINTERNET hHttpSession = InternetConnectA(hIntSession, host, atoi(port), 0, 0, INTERNET_SERVICE_HTTP, 0, NULL);
    HINTERNET hHttpRequest = HttpOpenRequestA(hHttpSession, method, path, HTTP_VERSIONA, 0, 0, 
        INTERNET_FLAG_IGNORE_CERT_CN_INVALID | INTERNET_FLAG_IGNORE_CERT_DATE_INVALID |
        INTERNET_FLAG_RELOAD | ( atoi(port)==443 ? INTERNET_FLAG_SECURE : 0 ) | INTERNET_FLAG_IGNORE_REDIRECT_TO_HTTP |
        INTERNET_FLAG_IGNORE_REDIRECT_TO_HTTPS | INTERNET_FLAG_KEEP_CONNECTION | 
        INTERNET_FLAG_NO_COOKIES | INTERNET_FLAG_NO_UI, 0);
    if (!HttpSendRequestA(hHttpRequest, headers, strlen(headers), data, data == NULL ? 0 : strlen(data))) {
        DWORD dwError = GetLastError();
        InternetCloseHandle(hHttpRequest);
        InternetCloseHandle(hHttpSession);
        InternetCloseHandle(hIntSession);
        return;
    }
    char buffer[1025] = { '\0' };
    DWORD dwRead = 0;
    while (InternetReadFile(hHttpRequest, buffer, sizeof(buffer) - 1, &dwRead) && dwRead) {
        buffer[dwRead] = '\0';
        OutputDebugStringA(buffer);
        dwRead = 0;
        strResponse.append(buffer);
    }
    InternetCloseHandle(hHttpRequest);
    InternetCloseHandle(hHttpSession);
    InternetCloseHandle(hIntSession);
В результате выполнения данного кода получаю абсолютно нечитаемую строку:
Код
\x1f‹\b\x1dЇЧJуЪM|љЧЦkoОkҐ¶}hџsёж\x1e\x13щ¬Б—'\x1aЬЫЏДАO‡п\xfЯ=\x3Ю…\x1fN2&¶IђйР¶Ћ\x18\x19џ)FTб¦3СІ4Й,рy\bp0юа\vьEpл\fал‹“\fk\x6‘Эr,Ж\tшљc‡ѓ‡g\r=\x11®!тэ\x1e\rьoШ\x1dЯБ®щ87¬dS0ЉbПMЧ\x13ц\vс%›\xfR‘н›Nh‰}.6µz°\x1cmЧp¬эЁ±ЩИД 2ыs¬ЩbtКt\x12мПкО5гєРhb› ?\x6я\x3u]фУ8NїC...
Что делаю не так?

Заранее благодарен всем за помощь.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
02.08.2015, 16:09
Ответы с готовыми решениями:

WinINET. Получить ответ от сайта в виде XML
Код ниже скачивает страницу с сайта и проблем нет! Но отправить этот запрос на сайт...

Как из wav файла получить читаемый txt, а потом обратно
Извиняюсь если не совсем по адресу, но я уверен что местные читатели знают как это сделать. Суть...

Wininet, ошибка 12157 при попытке получить веб страницу
Доброго времени, посмотрел простенькие реализации получения кода веб странички, нашел подходящую....

Получить Web-страницу через WinInet API - ошибка на некоторых серверах
Использую в проекте парсинга полученных из Инета страниц приведенный в пункте 29 ветки ...

2
117 / 121 / 42
Регистрация: 25.08.2012
Сообщений: 1,294
02.08.2015, 20:31 2
igorbelykh, кодировка напортачила? Раз соединение есть, значит, все скачивается, а раз скачивается, значит, неправильно интерпретируется. Заголовки ведь там на Unicode. Пробуйте с английского сайта, или поиграйтесь с типом wchar_t.
1
8 / 8 / 3
Регистрация: 01.03.2013
Сообщений: 85
02.08.2015, 20:33  [ТС] 3
Решил вопрос самостоятельно. Проблема заключалась в том, что заголовки, посылаемые серверу содержат параметр Accept-Encoding: defate,gzip. Отфильтровав данный параметр и установив его в Accept-Encoding: deflate, проблема решается сама собой.
0
02.08.2015, 20:33
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
02.08.2015, 20:33
Помогаю со студенческими работами здесь

Получить ответ от PHP
Всем привет , появилась надобность С помощью программы написанной на C# отправлять запросы на...

Получить ответ от сервера
Попробовал отправить запрос с помощью QNetworkAccessManager и QNetworkRequest, а с помощью сигнала...

Получить ответ вк в json
Прочитал статью о vk api и, что вк присылает ответ в json ничего не понял. Как можно отловить этот...

Получить ответ от сервера
Добрый день! У меня возник еще один вопрос. Пишу программу которая авторизовывается на одном...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru