Чтение вкладок со страницы с помощью WinInet C++

93
13 февраля 2018, 06:40

Добрый день! На данном сайте https://rsdn.org/article/inet/wininet.xml прочитал, как сделать http-запрос к сайту и считать его html код. Я без большого труда считал код с сайта, URL которого выглядит так "www.site-name.ru". Напоролся на трудности, когда попытался считать с одного сайта информацию следующим образом "www.site-name.ru/site.php". Неверно работал запрос

BOOL bSend = ::HttpSendRequest(hRequest, NULL, 0, NULL, 0);

Я не смог выяснить ошибку, может считывание вложенных вкладок осуществляется по еще какому-то запросу? Может кто-то объяснит? Вот код

#include "stdafx.h"
#include <windows.h>
#include <wininet.h>
#pragma comment(lib,"wininet")
#include <stdlib.h>
#include <fstream>
using namespace std;
int main(int argc, char* argv[])
{
    bool ok = false;
    // инициализируем WinInet
    HINTERNET hInternet =
        ::InternetOpen(
            TEXT("WinInet Test"),
            INTERNET_OPEN_TYPE_PRECONFIG,
            NULL, NULL,
            0);
    if (hInternet != NULL) {
        // открываем HTTP сессию
        HINTERNET hConnect =
            ::InternetConnect(
                hInternet,
                TEXT("rsdn.org"),
                INTERNET_DEFAULT_HTTP_PORT,
                NULL, NULL,
                INTERNET_SERVICE_HTTP,
                0,
                1u);
        if (hConnect != NULL) {
            // открываем запрос
            HINTERNET hRequest =
                ::HttpOpenRequest(
                    hConnect,
                    TEXT("GET"),
                    NULL,
                    NULL,
                    NULL,
                    0,
                    INTERNET_FLAG_KEEP_CONNECTION,
                    1);
            if (hRequest != NULL) {
                // посылаем запрос
                BOOL bSend = ::HttpSendRequest(hRequest, NULL, 0, NULL, 0);
                if (bSend) {
                    // создаём выходной файл
                    ofstream fnews("news.html", ios::out | ios::binary);
                    if (fnews.is_open()) for (;;) {
                        // читаем данные
                        char  szData[1024];
                        DWORD dwBytesRead;
                        BOOL bRead =
                            ::InternetReadFile(
                                hRequest,
                                szData, sizeof(szData) - 1,
                                &dwBytesRead);
                        // выход из цикла при ошибке или завершении
                        if (bRead == FALSE || dwBytesRead == 0)
                            break;
                        // сохраняем результат
                        szData[dwBytesRead] = 0;
                        fnews << szData;
                        ok = true;
                    }
                }
                // закрываем запрос
                ::InternetCloseHandle(hRequest);
            }
            // закрываем сессию
            ::InternetCloseHandle(hConnect);
        }
        // закрываем WinInet
        ::InternetCloseHandle(hInternet);
    }
    // для полного счастья, запускаем считанную страничку
    if (ok)
        system("start news.html");
    return 0;
}
READ ALSO
Вывести строку без html-тэгов, но оставить их содержимое

Вывести строку без html-тэгов, но оставить их содержимое

Есть код который выводит первую строку из файла:

74
Как задать цвет заголовку?

Как задать цвет заголовку?

Подскажите, какой контейнер или атрибут тега задает цвет заголовку?

97
Проблема при загрузке .css

Проблема при загрузке .css

Файлcss почему-то не подгружается, выводя в консоли ошибку:

114
Почему на сайтах не используется отступ для начала красной строки?

Почему на сайтах не используется отступ для начала красной строки?

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

130