如何为boost :: asio添加代理支持?

时间:2012-07-17 13:44:58

标签: c++ proxy boost-asio

在我的桌面应用程序中,我使用boost :: asio添加了对各种Internet资源的访问。我所做的就是发送http请求(即映射磁贴服务器)并读取结果。 我的代码基于asio sync_client sample

现在我收到了无法使用这些功能的客户的报告,因为他们在公司中运行代理。在Web浏览器中,他们可以输入代理的地址,一切都很好。我们的应用程序无法下载数据。

如何在我的应用程序中添加此类支持?

2 个答案:

答案 0 :(得分:5)

我自己找到了答案。这很简单:

http://www.jmarshall.com/easy/http/#proxies 给出了一个简短而清晰的描述http代理如何工作的方法。

我所要做的就是将以下代码添加到asio sync_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);

...

答案 1 :(得分:2)

似乎样本仅仅是Boost ASIO可用于什么的炫耀,但可能不打算按原样使用。您应该使用一个完整的库,它不仅可以处理HTTP代理,还可以处理HTTP重定向,压缩等。

HTTP是一件复杂的事情:如果没有这样做,很快就会有另外一个问题从另一个客户那里获得新闻。

我发现cppnetlib看起来很有前景,并且基于Boost ASIO而不确定它是否处理代理。

还有libcurl但我不知道它是否可以轻松地与Boost ASIO集成。