#include <iostream>
#include <urlmon.h>
#include <string>
#pragma comment(lib,"urlmon.lib")
using namespace std;
int main()
{
string indirizzo;
IStream * is;
char buffer[256];
cout<<"Insert adress of the web page: ";
cin>>indirizzo;
if(URLOpenBlockingStream(NULL,indirizzo.c_str(),&is,0,NULL)!=S_OK)
{
cerr<<"ERROR DOWNLOAD.";
}
else
{
cout<<"download OK"<<endl;
system("Pause");
ULONG readBytes;
while(is->Read(buffer,sizeof(buffer),&readBytes)==S_OK)
{
cout.write(buffer,readBytes);
}
is->Release();
}
system("cls");
system("Pause");
return 0;
}
您可以通过在http请求之前通过代理连接套接字来完成此操作吗?我想通过代理
做一切答案 0 :(得分:0)
您使用的API似乎是InternetExplorer派生的。似乎您不能仅使用此API来使用代理(系统范围之外)。如果你没问题,只需将你的ControlPanel代理设置为所需的设置,你就可以了。 IE以外的浏览器甚至可能会被配置,因此他们使用自己的代理设置,因此如果只需要程序设置,就可以限制系统范围设置的效果。
如果您只是为了您的应用程序而严格需要,或者隐藏/安全(用户可能能够看到/更改IE设置),您可能会尝试使用WinINet下载文件,但这不是您要求的。 WinINet版本将更长,更麻烦我期望。请参阅MSDN WinINet documentation,特别是InternetSetOption。
修改强>
我发现您可能会使用它来全局和按进程设置IE设置。请参阅How to programmatically query and set proxy settings under Internet Explorer和INTERNET_OPTION_PER_CONNECTION_OPTION选项的文档。
要在系统范围内执行此操作,请在NULL
中使用hInternet
作为InternetSetOption
。要仅为您自己的进程执行此操作,请在任何其他网络代码之前使用InternetOpen
,并使用返回的句柄 - 它似乎也应该影响动态加载的IE引擎。