C++ WinHTTP API чтения данных
Я пытаюсь загрузить данные с веб-страницы, а затем проанализировать их, проблема в том, что я не могу получить значение pszoutbuffer
(ZeroMemory
функция удаляет его) я взял код из примера MSDN
void http_connect::read_data(void)
{
// Keep checking for data until there is nothing left.
if( bResults )
{
do
{
// Check for available data.
dwSize = 0;
if (!WinHttpQueryDataAvailable( hRequest, &dwSize))
printf( "Error %u in WinHttpQueryDataAvailable.\n",
GetLastError());
// Allocate space for the buffer.
pszOutBuffer = new char[dwSize+1];
if (!pszOutBuffer)
{
printf("Out of memory\n");
dwSize=0;
}
else
{
// Read the Data.
ZeroMemory(pszOutBuffer, dwSize+1);
if (!WinHttpReadData( hRequest, (LPVOID)pszOutBuffer,
dwSize, &dwDownloaded))
{
printf( "Error %u in WinHttpReadData.\n",
GetLastError());
}
}
} while( dwSize > 0 );
}
}
2 ответа
Я думаю, что сразу после WinHttpReadData вы должны добавить содержимое pszOutBuffer в строку, чтобы вы могли использовать его позже.
Как вы сказали, pszOutBuffer продолжает перезаписываться на каждой итерации цикла. Похоже, это просто временное хранилище для копирования в нечто постоянное.
Этот пример кода просто ничего не делает с данными. Вы должны добавить код, чтобы сделать что-то с данными, например:
if (!pszOutBuffer)
{
printf("Out of memory\n");
dwSize=0;
}
else
{
// Read the Data.
ZeroMemory(pszOutBuffer, dwSize+1);
if (!WinHttpReadData( hRequest, (LPVOID)pszOutBuffer,
dwSize, &dwDownloaded))
{
printf( "Error %u in WinHttpReadData.\n",
GetLastError());
}
else
{
// add code here to do something with the data
// data is in pszOutBuffer and byte count is dwSize
}
}
} while( dwSize > 0 );
Призыв к ZeroMemory
не нужен Вероятно, это поможет вам запутаться, если ваша программа ошибочно попытается получить доступ к данным после точки, которая была прочитана. В этом нет необходимости, если ваш код соответствует базовым правилам безопасности для работы с данными, полученными по сети - не читайте мимо dwSize
и не предполагайте, что данные имеют завершающий нулевой байт.