8

デスクトップアプリケーションで、boost::asioを使用してさまざまなインターネットリソースへのアクセスを追加しました。私がしているのは、httpリクエストを送信して(つまり、タイルサーバーをマップするために)結果を読み取ることだけです。私のコードは、 asiosync_clientサンプルに基づいています。

現在、社内でプロキシを実行しているため、これらの機能を使用できないお客様からのレポートを受け取ります。Webブラウザでは、プロキシのアドレスを入力でき、すべて問題ありません。アプリケーションがデータをダウンロードできません。

このようなサポートをアプリケーションに追加するにはどうすればよいですか?

4

2 に答える 2

7

私は自分で答えを見つけました。それは非常に簡単です:

http://www.jmarshall.com/easy/http/#proxies は、httpプロキシがどのように機能するかを非常に簡潔かつ明確に説明しています。

私がしなければならなかったのは、asiosync_clientサンプルサンプルに次のコードを追加することだけです。

std::string myProxyServer = ...;
int         myProxyPort   = ...;

void doDownLoad(const std::string &in_server, const std::string &in_path, std::ostream &outstream)
{
    std::string server      = in_server;
    std::string path        = in_path;
    char serice_port[255];
    strcpy(serice_port, "http");

    if(! myProxyServer.empty())
    {
        path   = "http://" + in_server + in_path;
        server = myProxyServer;
        if(myProxyPort    != 0)
            sprintf(serice_port, "%d", myProxyPort);
    }
    tcp::resolver resolver(io_service);
    tcp::resolver::query query(server, serice_port);

...
于 2012-07-18T08:51:01.103 に答える
3

サンプルは、Boost ASIOの用途を示すものにすぎないようですが、そのまま使用することを意図したものではない可能性があります。おそらく、HTTPプロキシだけでなく、HTTPリダイレクト、圧縮なども処理する完全なライブラリを使用する必要があります。

HTTPは複雑なものです。そうしないと、別の問題ですぐに別のクライアントからニュースを受け取る可能性が高くなります。

有望に見え、Boost ASIOに基づくcppnetlibを見つけましたが、プロキシを処理できるかどうかはわかりません。

libcurlもありますが、 BoostASIOと簡単に統合できるかどうかはわかりません。

于 2012-07-17T15:25:42.260 に答える