簡體   English   中英

C ++ boost :: asio https通過代理

[英]C++ boost::asio https through proxy

所以我有這段代碼可以使用boost :: asio與ssl連接正常工作:

打開了Fiddler,但我完全看不到這些聯系。 從我讀到的內容中,我得知必須將請求通過代理傳遞。 因此,我嘗試使用所有可以找到的示例和答案進行嘗試,但無法使其正常運行。

我得到的最好的是,握手從未觸發過回調。

我想念什么?

void performHTTPRequest(std::string host, std::string path) {
    std::ostream request_stream(&mRequest);
    request_stream << "GET " << path << " HTTP/1.1\r\n";
    request_stream << "Host: " << host << "\r\n";
    request_stream << "Accept: */*\r\n";
    request_stream << "Connection: close\r\n\r\n";
    tcp::resolver::query query(host, "https");
    mResolver.async_resolve(query,
        boost::bind(handle_resolve,
        this,
        boost::asio::placeholders::error,
        boost::asio::placeholders::iterator));
}

void handle_resolve(const boost::system::error_code& err,
        tcp::resolver::iterator endpoint_iterator)
{
    if (!err)
    {
        boost::asio::async_connect(mSocket.lowest_layer(), 
            endpoint_iterator,
            boost::bind(&handle_connect, this,
            boost::asio::placeholders::error));
    }
    else
    {
        delete this;
    }
}

void handle_connect(const boost::system::error_code& err)
{
    if (!err)
    {
        mSocket.async_handshake(
            boost::asio::ssl::stream_base::handshake_type::client,
            boost::bind(&handle_handshake, this,
            boost::asio::placeholders::error));
    }
    else
    {
        delete this;
    }
}


void handle_handshake(const boost::system::error_code& err)
{
    if (!err)
    {
        boost::asio::async_write(mSocket, mRequest,
            boost::bind(&handle_write_request, this,
            boost::asio::placeholders::error));
    }
    else
    {
        delete this;
    }
}

void handle_write_request(const boost::system::error_code& err)
{
    if (!err)
    {
        boost::asio::async_read_until(mSocket, mResponse, "\r\n",
            boost::bind(&handle_read_status_line, this,
            boost::asio::placeholders::error));
    }
    else
    {
        delete this;
    }
}

void handle_read_status_line(const boost::system::error_code& err)
{
    if (!err)
    {
        std::istream response_stream(&mResponse);
        std::string http_version;
        response_stream >> http_version;
        unsigned int status_code;
        response_stream >> status_code;
        std::string status_message;
        std::getline(response_stream, status_message);
        if (!response_stream || http_version.substr(0, 5) != "HTTP/")
        {
            return;
        }
        if (status_code != 200)
        {
            return;
        }
    }
    else
    {
        delete this;
    }
}

似乎只是更改此行:

tcp::resolver::query query(host, "https");

有了這個:

tcp::resolver::query query(proxyUrl, proxyPort);

做到了。

問題是代理配置不允許HTTPS通信。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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