c++使用wininet获取网页



我正在尝试使用WinInet下载网页。我使用了这里给出的代码:http://www.cplusplus.com/forum/windows/109799/

它基本上是有效的,但似乎有一些编码问题,我不知道如何解决。

例如,这一行(使用www.stackoverflow.com作为示例页面(:

<link rel="stylesheet" type="text/css" href="https://cdn.sstatic.net/Shared/stacks.css?v=48511da708b8">

返回为此行:

<link rel="stylesheet" type="text/css" href="https://cdn.sstatic.net/Shared/stacks.css?cks.css?ÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌðA6÷v=48511da708b8">

(为了避免垃圾邮件,我实际上已经删除了大多数特殊字符(

在此代码中:

while(InternetReadFile(OpenAddress, DataReceived, 4096, &NumberOfBytesRead) && NumberOfBytesRead )
{
cout << DataReceived;
}

CCD_ 1正在接收任意字节。它不是以null结尾的字符串,但代码正在将其传递给operator<<重载,该重载需要以null结束的字符串。因此,打印超过了接收数据的末尾,从周围的存储器打印字节,直到遇到随机0x00字节。

使用istream::write()方法,这样您就可以准确地告诉它要打印多少个字符:

cout.write(DataReceived, NumberOfBytesRead);

最新更新