Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как написать download-клиента HTTP? 
:(
    Опции темы
erslgoeirjh
Дата 30.1.2006, 10:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 147
Регистрация: 16.12.2005

Репутация: нет
Всего: нет



Имеется некий URL ( /download.php ) на Web-сервере, с которого скачивается некоторый файл. Как мне написать клиентское приложение на VC++, которое бы принимало с этого сервера этот файл? Протокол передачи файлов -- HTTP.

PM MAIL   Вверх
Sun
Дата 30.1.2006, 13:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Account removed
***


Профиль
Группа: Экс. модератор
Сообщений: 1611
Регистрация: 14.8.2002

Репутация: нет
Всего: 48



Можно через MFC класс CHttpFile
http://msdn.microsoft.com/library/default....C_CHttpFile.asp


--------------------
Account removed
PM MAIL   Вверх
erslgoeirjh
Дата 1.2.2006, 19:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 147
Регистрация: 16.12.2005

Репутация: нет
Всего: нет



Sun, спасибо! Я, в свою очередь, нашёл следующую ссылку:

http://www.rsdn.ru/article/inet/wininet.xml

Но у меня, тем не менее, есть вопрос. Я написал следующий код:

Код

#include "stdafx.h"
#include <windows.h>
#include <wininet.h>
#pragma comment(lib,"wininet")
#include <stdlib.h>
#include <fstream.h>
#include <winbase.h>
#include <stdio.h>

int APIENTRY WinMain(HINSTANCE hInstance,
                     HINSTANCE hPrevInstance,
                     LPSTR     lpCmdLine,
                     int       nCmdShow)
{
    BOOL  ok = FALSE;
    DWORD  res;
    
    HINTERNET  hInternet = ::InternetOpen(TEXT("MyGetDownload"),INTERNET_OPEN_TYPE_PRECONFIG,NULL,NULL,0);
    if (hInternet!=NULL)
    {
        HINTERNET  hConnect = ::InternetConnect(hInternet,TEXT("localhost"),INTERNET_DEFAULT_HTTP_PORT,NULL,NULL,
                                                INTERNET_SERVICE_HTTP,0,1u);
        if (hConnect!=NULL)
        {
            HINTERNET  hRequest = ::HttpOpenRequest(hConnect,TEXT("GET"),TEXT("download.php"),NULL,NULL,0,
                                                    INTERNET_FLAG_KEEP_CONNECTION,1);
            if (hRequest!=NULL)
            {
                BOOL  bSend = ::HttpSendRequest(hRequest,NULL,0,NULL,0);
                if (bSend)
                {
                    FILE* fmyfile = fopen("mydownload.dat","wb");
                    for(;;)
                    {
                        char  szData[1024];
                        DWORD  dwBytesRead;
                        BOOL  bRead = ::InternetReadFile(hRequest,szData,(sizeof(szData)),&dwBytesRead);
                        if (bRead==FALSE||dwBytesRead==0)  break;
                        fwrite(szData,sizeof(char),dwBytesRead,fmyfile);
                        ok = TRUE;
                    }
                    fclose(fmyfile);
                }
                else
                {
                    res = GetLastError();
                }
            }
            ::InternetCloseHandle(hRequest);
        }
        ::InternetCloseHandle(hConnect);
    }
    ::InternetCloseHandle(hInternet);
    return 0;
} // конец функции WinMain


И в результате в файл mydownload.dat записывается скачиваемый файл. Но мне нужно в данном случае скачать с сервера не содержимое скачиваемого файла, а содержимое файла download.php -- чтобы можно по этому содержимому произвести парсинг (разбор кода) PHP с целью узнать имя скачиваемого файла.
Что мне нужно изменить в моём C++ коде?

PM MAIL   Вверх
Sun
Дата 2.2.2006, 17:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Account removed
***


Профиль
Группа: Экс. модератор
Сообщений: 1611
Регистрация: 14.8.2002

Репутация: нет
Всего: 48



Цитата(erslgoeirjh @ 1.2.2006, 16:01 Найти цитируемый пост)

Но мне нужно в данном случае скачать с сервера не содержимое скачиваемого файла, а содержимое файла download.php -- чтобы можно по этому содержимому произвести парсинг (разбор кода) PHP с целью узнать имя скачиваемого файла.

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


--------------------
Account removed
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Продвижение и оптимизация сайтов | Следующая тема »


 




[ Время генерации скрипта: 0.0714 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.