c++ socket通过代理连接

C++ socket connection through proxy

本文关键字:代理 连接 socket c++      更新时间:2023-10-16

大家好,我问我的问题,我有这个代码下载一个网页

#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选项的文档。

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