通过代理的C ++套接字连接

时间:2014-07-12 23:02:13

标签: c++ sockets 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请求之前通过代理连接套接字来完成此操作吗?我想通过代理

做一切

1 个答案:

答案 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 ExplorerINTERNET_OPTION_PER_CONNECTION_OPTION选项的文档。

要在系统范围内执行此操作,请在NULL中使用hInternet作为InternetSetOption。要仅为您自己的进程执行此操作,请在任何其他网络代码之前使用InternetOpen,并使用返回的句柄 - 它似乎也应该影响动态加载的IE引擎。