c++ WinHTTP API读取数据
C++ WinHTTP API reading data
我试图从网页下载数据然后解析它,问题是我无法获得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 memoryn");
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 );
}
}
我认为在WinHttpReadData之后,您应该立即将pszOutBuffer的内容附加到字符串中,以便您以后可以使用它。
正如您所说,每次循环迭代都会覆盖pszOutBuffer。它看起来只是一个临时存储空间,供您复制到永久存储空间
这个示例代码没有对数据做任何操作。您应该添加代码来处理数据,如下所示:
if (!pszOutBuffer)
{
printf("Out of memoryn");
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
的数据,也不要假设数据具有终止零字节。
相关文章:
- C++将文本文件中的数据读取到结构数组中
- 为 Sql 服务器实现 odbc 包装器.将数据库数据读取为字符或要求驱动程序将数据转换为 C 类型
- 如何将来自文本文件的数据读取到结构的int阵列中
- 如何将不同长度的数据读取到 2D 数组中
- 从TXT文件到C 的结构向量中的数据读取
- 将sqlite原始数据读取到qbyTearray
- 如何将来自输入TXT文件的数据读取到2 C 数组中
- 使用MQQueue将数据读取到缓冲区中时麻烦
- 在 VC++ 中将类数据读取和写入二进制文件
- 将数据从数据读取器终端获取到GUI(QtCreator)
- C 将数据读取到一个结构,但它跳过了我的一个获取线,使该元素空白
- C++将二进制数据读取到结构
- c++我需要将文件中的数据读取到多维数组中,然后用一种数据类型对数组进行排序.怎样
- 对齐数据:速度取决于恒定数据读取的相对采样大小和采样频率
- 如何将文件中的数据读取到数组中
- 如何使用Visual C++应用程序的完整应用程序数据读取Minidump的应用程序数据
- 如何将csv文件数据读取到数组中
- 用C++将格式化的数值数据读取到数组中
- 正在从文件中将数据读取到结构数组中
- 将分离的数据读取到数组结构c++中