Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

WinInet

507
14 августа 2005 года
PASS
45 / / 20.09.2000
Задача: скачать из интернета картинку по адресу https://somehost.tld/img.php?123456, где 123456 - генерируемое по определённому алгоритму число. Поскольку разбираться в RFC по SSL не было ни малейшего желания, было решено использовать библиотеку WinInet. Однако не обошлось без неприятностей.

Код:
// инициализируем интернет-соединения
if((hInternet = InternetOpen(szAgent, INTERNET_OPEN_TYPE_PROXY,
    "https=https://192.168.0.1:8080", NULL, NULL)) != NULL)
{
    dwID = GetID();
    wsprintf(szImage, "https://somehost.tld/img.php?%d", dwID);

    // открываем картинку
    if((hImage = InternetOpenUrl(hInternet, szImage,
        NULL, NULL, NULL, NULL)) != NULL)
    {
        if(InternetReadFile(hImage, szBuffer, sizeof(szBuffer), &dwRead))
        {
            // скачали
            fp = fopen("c:\\tmp.jpg", "w");
            fwrite(szBuffer, dwRead, 1, fp);
            fclose(fp);
        }
        else Debug("Can not download image..", 1);
        // закрываем сессию
        InternetCloseHandle(hImage);
    }
    // закрываем интернет-соединения
    InternetCloseHandle(hInternet);
}


Дело в том, что этот код вроде бы работает, т.е. картинка скачивается и записывается на диск, но если открыть её в ACDSee, то оторажается полнейший мусор. Кто-нибудь сталкивался с похожей проблемой?
492
15 августа 2005 года
alibabaich
238 / / 08.07.2004
Цитата:
Originally posted by PASS
Задача: скачать из интернета картинку по адресу https://somehost.tld/img.php?123456, где 123456 - генерируемое по определённому алгоритму число. Поскольку разбираться в RFC по SSL не было ни малейшего желания, было решено использовать библиотеку WinInet. Однако не обошлось без неприятностей.

Код:
// инициализируем интернет-соединения
if((hInternet = InternetOpen(szAgent, INTERNET_OPEN_TYPE_PROXY,
    "https=https://192.168.0.1:8080", NULL, NULL)) != NULL)
{
    dwID = GetID();
    wsprintf(szImage, "https://somehost.tld/img.php?%d", dwID);

    // открываем картинку
    if((hImage = InternetOpenUrl(hInternet, szImage,
        NULL, NULL, NULL, NULL)) != NULL)
    {
        if(InternetReadFile(hImage, szBuffer, sizeof(szBuffer), &dwRead))
        {
            // скачали
            fp = fopen("c:\\tmp.jpg", "w");
            fwrite(szBuffer, dwRead, 1, fp);
            fclose(fp);
        }
        else Debug("Can not download image..", 1);
        // закрываем сессию
        InternetCloseHandle(hImage);
    }
    // закрываем интернет-соединения
    InternetCloseHandle(hInternet);
}


Дело в том, что этот код вроде бы работает, т.е. картинка скачивается и записывается на диск, но если открыть её в ACDSee, то оторажается полнейший мусор. Кто-нибудь сталкивался с похожей проблемой?

И где блок дешифрации скаченого файла?

20K
07 сентября 2006 года
vao
5 / / 01.09.2006
нда уж...
видимо беда в том, что получаемые данные закриптованы (раз уж это идёт через SSL).У меня похожая беда. Как я понял нужно ищё юзать InternetSetOption с параметром INTERNET_OPTION_CLIENT_CERT_CONTEXT
Как сказано в МСДН:
INTERNET_OPTION_CLIENT_CERT_CONTEXT
84
This flag is not supported by InternetQueryOption. The lpBuffer parameter must be a pointer to a CERT_CONTEXT structure and not a pointer to a CERT_CONTEXT pointer. If an application receives ERROR_INTERNET_CLIENT_AUTH_CERT_NEEDED, it must call InternetErrorDlg or use InternetSetOption to supply a certificate before retrying the request. CertDuplicateCertificateContext is then called so that the certificate context passed can be independently released by the application.

хотя может я неправ (сам пытаюсь разобратся:))
34K
13 ноября 2007 года
el_mago
1 / / 13.11.2007
fp = fopen("c:\\tmp.jpg", "wb");
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог