WinInet 将读取文件存储在字符/字符串 c++ 上
Posted
技术标签:
【中文标题】WinInet 将读取文件存储在字符/字符串 c++ 上【英文标题】:WinInet store read file on a char/string c++ 【发布时间】:2018-03-11 21:16:36 【问题描述】:#include <WinInet.h>
#pragma comment(lib, "wininet")
void download(std::string domain, std::string url)
HINTERNET hIntSession = InternetOpenA("MyApp", INTERNET_OPEN_TYPE_DIRECT, NULL, NULL, 0);
HINTERNET hHttpSession = InternetConnectA(hIntSession, domain.c_str(), 80, 0, 0, INTERNET_SERVICE_HTTP, 0, NULL);
HINTERNET hHttpRequest = HttpOpenRequestA(hHttpSession, "GET", url.c_str(), 0, 0, 0, INTERNET_FLAG_RELOAD, 0);
TCHAR* szHeaders = "";
CHAR szReq[1024] = "";
if (!HttpSendRequest(hHttpRequest, szHeaders, wcslen(L""), szReq, strlen(szReq)))
MessageBoxA(NULL, "No se puede conectar al Servidor de Actualizaciones.", "Error Kundun", MB_OK | MB_ICONERROR);
TCHAR szBuffer[1025];
DWORD dwRead = 0;
while (InternetReadFile(hHttpRequest, szBuffer, 1024, &dwRead) && dwRead)
// What to do here?
InternetCloseHandle(hHttpRequest);
InternetCloseHandle(hHttpSession);
InternetCloseHandle(hIntSession);
download("www.something.com", "File.txt");
所以我有这段代码可以从主机上的文本文件中读取内容。我设法通过谷歌搜索得到了它,它似乎工作得很好(如果我输入了一个不正确的域,它会显示带有错误的消息框)。问题是.. 我不知道如何将我刚刚读到的信息放入字符串或 char[]。
【问题讨论】:
我建议您先阅读所有那些“如何从 TCHAR 转换为 ...”的问题,然后再问另一个问题。 我在发帖之前已经看过很多帖子,我只是想要一些快速的帮助 > 我理解您所说的“只是需要一些快速帮助”,因为“如果需要的时间可以忽略不计,我自己也懒得做任何研究”。 【参考方案1】:将szBuffer
更改为char[]
,然后在循环中使用std::string::append()
:
#include <WinInet.h>
#pragma comment(lib, "wininet")
void download(const std::string & domain, const std::string &url)
HINTERNET hIntSession = InternetOpenA("MyApp", INTERNET_OPEN_TYPE_DIRECT, NULL, NULL, 0);
HINTERNET hHttpSession = InternetConnectA(hIntSession, domain.c_str(), 80, 0, 0, INTERNET_SERVICE_HTTP, 0, NULL);
HINTERNET hHttpRequest = HttpOpenRequestA(hHttpSession, "GET", url.c_str(), 0, 0, 0, INTERNET_FLAG_RELOAD, 0);
if (!HttpSendRequestA(hHttpRequest, NULL, 0, NULL, 0))
MessageBoxA(NULL, "No se puede conectar al Servidor de Actualizaciones.", "Error Kundun", MB_OK | MB_ICONERROR);
char szBuffer[1024];
DWORD dwRead = 0;
std::string data;
while (InternetReadFile(hHttpRequest, szBuffer, 1024, &dwRead) && dwRead)
data.append(szBuffer, dwRead);
InternetCloseHandle(hHttpRequest);
InternetCloseHandle(hHttpSession);
InternetCloseHandle(hIntSession);
// use data as needed...
【讨论】:
以上是关于WinInet 将读取文件存储在字符/字符串 c++ 上的主要内容,如果未能解决你的问题,请参考以下文章