WinInet 输出中的随机字符

Posted

技术标签:

【中文标题】WinInet 输出中的随机字符【英文标题】:Random characters in WinInet output 【发布时间】:2015-04-07 12:07:53 【问题描述】:

我有以下代码:

#include <wininet.h>
#include <cstdlib>
#include <iostream>
#include <windows.h>
#include <string.h>

using namespace std;


int main(int argc, char *argv[])

    HINTERNET connect = InternetOpen("MyBrowser",INTERNET_OPEN_TYPE_PRECONFIG,NULL, NULL, 0);

   if(!connect)
      cout<<"Connection Failed or Syntax error";
      return 0;
   

HINTERNET OpenAddress = InternetOpenUrl(connect,"http://shahriar.byethost9.com/com2.html", NULL, 0, INTERNET_FLAG_PRAGMA_NOCACHE|INTERNET_FLAG_KEEP_CONNECTION, 0);

   if ( !OpenAddress )
   
      DWORD ErrorNum = GetLastError();
      cout<<"Failed to open URL \nError No: "<<ErrorNum;
      InternetCloseHandle(connect);
      return 0;
   

   char DataReceived[4096];
   DWORD NumberOfBytesRead = 0;
   while(InternetReadFile(OpenAddress, DataReceived, 4096, &NumberOfBytesRead) && NumberOfBytesRead )
   
           cout << DataReceived;
   

   InternetCloseHandle(OpenAddress);
   InternetCloseHandle(connect);

   cin.get();
    system("PAUSE");
    return EXIT_SUCCESS;

它抓取http://shahriar.byethost9.com/com2.html的源代码并打印到控制台。

问题是,我页面的源代码是&lt;h5&gt;paint&lt;/h5&gt;,但程序正在打印:&lt;h5&gt;paint&lt;/h5&gt;¥(每次编辑页面源时最后一个字符都不同)。

编辑我的页面源代码后,它变为:&lt;h5&gt;mspaint&lt;/h5&gt;,但程序再次打印旧源代码 (&lt;h5&gt;paint&lt;/h5&gt;¥)。

【问题讨论】:

在使用缓冲区时不要假设缓冲区为空终止,或者自己对其进行空终止。你有字符串的实际长度。 【参考方案1】:

您是否尝试过以这种方式累积缓冲区:

cout << std::string(DataReceived, NumberOfBytesRead);

【讨论】:

以上是关于WinInet 输出中的随机字符的主要内容,如果未能解决你的问题,请参考以下文章

C++ WinInet 只发出 1 个请求

WinInet 将读取文件存储在字符/字符串 c++ 上

<WinInet.h> API 中的 InternetOpenUrl 和 InternetReadFile 帮助

HttpOpenRequest() 中的 WinInet 访问冲突

delphi中的动态数组和wininet?

WinInet 中的 HTTP 连接信息