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

Ваш аккаунт

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

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

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

HttpQueryInfo возвращает FALSE

833
28 января 2008 года
leich
135 / / 27.09.2006
Привет. Хочу узнать длину контента в ответе. Когда запрос идет на локальный сервер, то все нормально и длина выводится правильно. Как только идет запрос уже к внешнему сайту , то HttpQueryInfo возвращает FALSE (GetLastError() возвращает 2f76 - х.з. откуда), хотя потом InternetReadFile без проблем забирает контент и все правильно. Что это за глюк и как можно теперь узнать длину контента в ответе?
 
Код:
HttpQueryInfo(hRequest, HTTP_QUERY_CONTENT_LENGTH | HTTP_QUERY_FLAG_NUMBER, &dwDataSize, &dwLengthDataSize, NULL)
246
04 февраля 2008 года
GIZMO
1.8K / / 30.07.2004
Цитата: leich
Привет. Хочу узнать длину контента в ответе. Когда запрос идет на локальный сервер, то все нормально и длина выводится правильно. Как только идет запрос уже к внешнему сайту , то HttpQueryInfo возвращает FALSE (GetLastError() возвращает 2f76 - х.з. откуда), хотя потом InternetReadFile без проблем забирает контент и все правильно. Что это за глюк и как можно теперь узнать длину контента в ответе?
 
Код:
HttpQueryInfo(hRequest, HTTP_QUERY_CONTENT_LENGTH | HTTP_QUERY_FLAG_NUMBER, &dwDataSize, &dwLengthDataSize, NULL)



А ты уверен, что сервер обязан выдавать тебе длину контента?
У меня тоже не всегда получается.
На всякий случай:

Код:
// 1
DWORD TIEHttp::GetDataSize ()
{
    if (FRequest) {
        DWORD dwDataSize = 0;
        DWORD dwLengthDataSize = sizeof(dwDataSize);

        BOOL bQuery = ::HttpQueryInfo(
            FRequest,
            HTTP_QUERY_CONTENT_LENGTH | HTTP_QUERY_FLAG_NUMBER,
            &dwDataSize,
            &dwLengthDataSize,
            NULL);

        return bQuery? dwDataSize: 0;
    }

    return 0;
}

// 2
LPSTR TIEHttp::HeaderField(LPSTR lpszHeaderField)
{
    //TODO: Add your source code here
    SetStrBuffer(m_lpszResponseHeaderField, NULL);

    DWORD dwSize = 20;
    m_lpszResponseHeaderField = new char[dwSize];
    wsprintf(m_lpszResponseHeaderField, "%s", lpszHeaderField);

    retry:

    if(!::HttpQueryInfo(FRequest, HTTP_QUERY_CUSTOM,
            (LPVOID)m_lpszResponseHeaderField, &dwSize, NULL))
    {
        if (GetLastError()==ERROR_HTTP_HEADER_NOT_FOUND)
        {
            // Code to handle the case where the header isn't available.
            m_lpszResponseHeaderField = NULL;
        }
        else
        {
            // Check for an insufficient buffer.
            if (GetLastError()==ERROR_INSUFFICIENT_BUFFER)
            {

                // Allocate the necessary buffer.
                m_lpszResponseHeaderField = new char[dwSize];

                // Rewrite the header name in the buffer.
                wsprintf(m_lpszResponseHeaderField, "%s", lpszHeaderField);

                // Retry the call.
                goto retry;
            }
            else
            {
                // Error handling code.
                m_lpszResponseHeaderField = NULL;
            }
        }
    }
   
    return m_lpszResponseHeaderField;
}

// use 2
    TIEHttp ht;
    String Header = ht.HeaderField("Content-Type");
833
04 февраля 2008 года
leich
135 / / 27.09.2006
Ок. Спасибо за код - заюзаю.
Цитата:
А ты уверен, что сервер обязан выдавать тебе длину контента?

. Да конечно. Это ж обыкновенное поле Content-length. Если его в ответе нет - значит скорее всего ошибся разработчик сервера. Да и те сервера, для которых HttpQueryInfo глючит это поле присылают.

43K
23 сентября 2008 года
bobikUA
2 / / 23.09.2008
Привет, GIZMO.Хочу узнать размер файла
Использую первый метод для получения размера
FRequest !=0 но функция возвращает false, a
GetLastError() возвращает 12150 - ERROR_HTTP_HEADER_NOT_FOUND.
Что может быть не правильно?
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог