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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 21.10.2008, 21:54   #1
Joltd
 
Регистрация: 21.10.2008
Сообщений: 3
По умолчанию Получение HTML-кода страницы

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

Вот код.

Код:
#include <stdio.h>
#include <wininet.h>
using namespace std;

const int iSizeBuffer = 32768;

int main()  {
    char cServer[32]="google.ru" ;
    char cAddres[256]="";
    
    HINTERNET hInternetSession;
    hInternetSession = InternetOpen(TEXT("Microsoft Internet Explorer"), INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, 0);
    if(hInternetSession)    {
        HINTERNET hConnection;
        hConnection = InternetConnect(hInternetSession, TEXT(cServer) ,INTERNET_DEFAULT_HTTP_PORT,
                                        NULL, NULL, INTERNET_SERVICE_HTTP, 0, 1u);
        if(hConnection != NULL)    {
            HINTERNET hRequest;
            hRequest = HttpOpenRequest(hConnection, TEXT("GET"), TEXT(cAddres), NULL, NULL, 0,
                                        INTERNET_FLAG_KEEP_CONNECTION, 1);
            if(hRequest != NULL)    {
                BOOL bSend;
                bSend = HttpSendRequest(hRequest, NULL, 0, NULL, 0);
                if(bSend)    {
                    char cBuffer[iSizeBuffer];
                    DWORD dwBytesRead;
                    BOOL bRead;
                    bRead = InternetReadFile(hRequest, cBuffer, iSizeBuffer-1, &dwBytesRead);
                    if(bRead && dwBytesRead > 0)    {
                        printf("Data has been read!");
                        FILE* pFile;
                        pFile = fopen("test.txt", "w");
                        fputs(cBuffer, pFile);
                        fclose(pFile);
                    }
                    else    {
                        printf("Data cannot be read");
                    }
                }
                else    {
                    printf("Unable to send request");
                }
                InternetCloseHandle(hRequest);
            }
            else    {
                printf("Unable to open http request");
            }
            InternetCloseHandle(hConnection);
        }
        else    {
            printf("Unable to open internet connection");
        }
        InternetCloseHandle(hInternetSession);
    }
    else    {
        printf("Cannot open internet");
    }
    
    system("PAUSE");
    return 0;
}
Буду очень рад за помощь.
Joltd вне форума Ответить с цитированием
Старый 22.10.2008, 18:27   #2
Joltd
 
Регистрация: 21.10.2008
Сообщений: 3
По умолчанию

Неужели никто не может помочь?
Я даже предположить ен могу почему программа рабоатет ибирательно для разных страниц, для одних сохраняет код полностью, а другие частично, причем при каждом запуске, сохраненый код то больше то меньше
Joltd вне форума Ответить с цитированием
Старый 25.10.2008, 03:53   #3
Min
Форумчанин
 
Регистрация: 12.09.2008
Сообщений: 239
По умолчанию

попробуйте читать в while...... вы ведь читаете в буфер только один раз и вполне конкретное колличество символов - iSizeBuffer....... а если колличество символов в странице больше этого числа?
нужно вывести чтение в while(dwBytesRead>0)...... успеха))))
Надо бы избавиться от привычки ставить многоточие.....
Min вне форума Ответить с цитированием
Старый 02.11.2008, 17:54   #4
Joltd
 
Регистрация: 21.10.2008
Сообщений: 3
По умолчанию

Охх... поставил цикл, вроде хтмл страницы качает полностью, но проблема с картинками, хоть убей но качает их не до конца! Постоянно скачает не полностью. Вот другой код, более короткий что-ли...

Код:
#include <wininet.h>
#include <stdio.h>

using namespace std;

int main()  {
    char szUrl[] = "http://www.google.ru/images/nav_logo3.png";

    HINTERNET hInternet = InternetOpen("MY AGENT", INTERNET_OPEN_TYPE_DIRECT, NULL, NULL, 0);
    HINTERNET hRequest = InternetOpenUrl(hInternet, szUrl, NULL, 0, 0, 0);

    if(hRequest)	{
        FILE* pFile;
        DWORD dwRead;
        char szTemp[1024];
        pFile = fopen("Pict.png", "w");
        while (InternetReadFile(hRequest, szTemp, 1024, &dwRead))	{
             if (!dwRead)	{
                 break;
            }
            fputs(szTemp, pFile);
        }
        fclose(pFile);
    }
    InternetCloseHandle(hRequest);
    InternetCloseHandle(hInternet);

    system("PAUESE");
    return 0;
}

Последний раз редактировалось Joltd; 02.11.2008 в 17:58.
Joltd вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сокеты, получение кода HTML страницы и обработка пропсов ABTOP C/C++ Сетевое программирование 5 19.10.2008 11:49
Получение HTML - кода??? PashaXP Win Api 9 05.08.2008 15:27
Выдернуть куски кода из html-кода trafbite Помощь студентам 7 18.08.2007 13:51
Получить HTML код страницы в Delphi Job Работа с сетью в Delphi 3 15.08.2007 11:29
Html страницы LineStown Работа с сетью в Delphi 3 11.04.2007 13:16