[英]C++ socket connection through proxy
大家好,我问我的问题,我有这段代码可以下载网页
#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请求之前通过代理连接套接字来做到这一点? 我想通过代理做所有事情
您使用的API似乎是InternetExplorer派生的。 似乎您不能仅使用此API来使用代理服务器(系统范围以外的代理服务器)。 如果您觉得合适,只需将ControlPanel代理设置为所需的设置就可以了。 IE以外的浏览器甚至可能已配置为使用他们自己的代理设置,因此,如果仅需要程序使用,则可以限制系统范围设置的影响。
如果仅对您的应用严格需要它,或者以其他方式隐藏/保护(用户可能能够查看/更改IE设置),则可以尝试使用WinINet下载文件,但这不是您要的。 我期望WinINet版本会更长,也更麻烦。 请参阅MSDN WinINet文档 ,尤其是InternetSetOption 。
编辑:
我看到您可能将可以使用它在全局和每个进程的基础上设置IE设置。 请参阅如何在Internet Explorer下以编程方式查询和设置代理设置 ,以及INTERNET_OPTION_PER_CONNECTION_OPTION选项的文档。
要在系统范围内做到这一点,只需在InternetSetOption
hInternet
NULL
用作hInternet
。 要仅针对您自己的过程执行此操作,请在使用任何其他网络代码之前使用InternetOpen
,并使用返回的句柄-看来它也应该影响动态加载的IE引擎。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.