如何解决C++:url 读取器功能不适用于带有 \ 符号的 URL 链接请帮助我
正如标题所写,这是一个返回 URL 的 HTML 源代码字符串的函数。
它仅适用于主页,例如 "finance.yahoo.com/"
。如果我尝试使用 Yahoo 中某个书签中的 URL,例如 "finance.yahoo.com/quote/BTC-USD/"
,则不起作用。
string getHtml() {
HINTERNET hInternet = InternetopenA("InetURL/1.0",INTERNET_OPEN_TYPE_PRECONfig,NULL,0);
HINTERNET hConnection = InternetConnectA(hInternet," finance.yahoo.com/quote/BTC-USD/",80," ",INTERNET_SERVICE_HTTP,0);
HINTERNET hData = HttpOpenRequestA(hConnection,"GET","/",INTERNET_FLAG_KEEP_CONNECTION,0);
char buf[2048];
string lol;
HttpSendRequestA(hData,0);
DWORD bytesRead = 0;
DWORD totalBytesRead = 0;
int i = 0;
string n,n2;
while (InternetReadFile(hData,buf,2000,&bytesRead) && bytesRead != 0)
{
buf[bytesRead] = 0; // insert the null terminator.
// puts(buf); // print it to the screen.
lol = lol + buf;
n = lol;
totalBytesRead += bytesRead;
}
InternetCloseHandle(hData);
InternetCloseHandle(hConnection);
InternetCloseHandle(hInternet);
return n;
}
解决方法
这是错误的:
HINTERNET hConnection = InternetConnectA(hInternet," finance.yahoo.com/quote/BTC-USD/",80," ",INTERNET_SERVICE_HTTP,0);
HINTERNET hData = HttpOpenRequestA(hConnection,"GET","/",NULL,INTERNET_FLAG_KEEP_CONNECTION,0);
您不能“连接”到这样的 URL,只能“连接”到主机名。
您只需在 InternetConnectA()
中指定主机名,然后在 HttpOpenRequestA()
中指定与该主机名相关的所需文档。
此外,finance.yahoo.com
使用 HTTPS,而不是 HTTP,因此您需要连接到 HTTPS 端口并对请求使用安全语义。
试试这个:
HINTERNET hConnection = InternetConnectA(hInternet,"finance.yahoo.com",INTERNET_DEFAULT_HTTPS_PORT,"/quote/BTC-USD/",INTERNET_FLAG_KEEP_CONNECTION | INTERNET_FLAG_SECURE,0);
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。