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

72
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-тэгов, но оставить их содержимое

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

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

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

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

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

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

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

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

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

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

104