在我的桌面应用程序,我添加访问使用boost :: ASIO各种互联网资源。 我要做的就是发送HTTP请求(即瓦服务器映射)和读取结果。 我的代码是基于ASIO sync_client样品 。
现在,我从他们运行在他们公司代理谁是无法使用这些功能的客户报告。 在Web浏览器便可以进入他们的代理服务器的地址,一切都很好。 我们的应用程序是无法下载的数据。
我怎样才能到我的应用程序中添加这种支持?
在我的桌面应用程序,我添加访问使用boost :: ASIO各种互联网资源。 我要做的就是发送HTTP请求(即瓦服务器映射)和读取结果。 我的代码是基于ASIO sync_client样品 。
现在,我从他们运行在他们公司代理谁是无法使用这些功能的客户报告。 在Web浏览器便可以进入他们的代理服务器的地址,一切都很好。 我们的应用程序是无法下载的数据。
我怎样才能到我的应用程序中添加这种支持?
我找到自己的答案。 这是很简单的:
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);
...
看来,样本仅仅是什么升压ASIO可以用来炫耀的,但很可能不是要照原样使用。 你或许应该使用不仅处理HTTP代理,而且还HTTP重定向,压缩,等一个完整的图书馆。
HTTP是一个复杂的事情:没有这样做,机会是很高,你会从另一个客户端很快得到消息与另一个问题。
我发现cppnetlib这看起来很有希望,并基于加速ASIO不知道它处理代理虽然。
还有libcurl的 ,但我不知道这是否可以很容易地加速ASIO集成。