簡體   English   中英

通過代理的C ++套接字連接

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM