C++ 帮助在C++;

C++ 帮助在C++;,c++,curl,streaming,boost-asio,C++,Curl,Streaming,Boost Asio,我希望使用一个提供流式api的web服务。此api通常可由java方法java.net.URL.openStream()使用 问题是,我试图在C++中设计我的程序,不知道使用什么库(我听说CURL库非常擅长这种事情),或者如何使用它们来做我想做的事情。 其思想是,在以流形式打开文件后,我可以实时访问不断更新的数据 任何帮助都将不胜感激。socket iostreams似乎就是您想要的。您的代码如下所示: ip::tcp::iostream stream("www.someserver.com",

我希望使用一个提供流式api的web服务。此api通常可由java方法java.net.URL.openStream()使用

问题是,我试图在C++中设计我的程序,不知道使用什么库(我听说CURL库非常擅长这种事情),或者如何使用它们来做我想做的事情。 其思想是,在以流形式打开文件后,我可以实时访问不断更新的数据

任何帮助都将不胜感激。

socket iostreams似乎就是您想要的。您的代码如下所示:

ip::tcp::iostream stream("www.someserver.com", "http");
if (!stream)
{
  // Can't connect.
}

// Use stream as a regular C++ input stream:
std::string text;
std::getline(stream, text);

如果你是C++新手,没有经验,那么IOFFASES就是一个极好的信息来源。特别是,检查

istream
类的文档,查看Boost.ASIO流将支持何种操作。您会发现它们与javaioapi中的没有太大区别

编辑:Eric是对的,您必须向服务器发送一些请求(使用相同的流),因此它可能不像我想象的那样类似于Java的
openStream
。以下示例显示了如何发出这些请求:


这取决于你在追求什么。如果您希望在较低的级别上获得一些东西,直接返回“原始”服务器响应,那么boost::asio::ip::tcp::iostream的性能是很好的(但是,我怀疑在他的回答中提供的示例中缺少了一些东西:我认为在读取流之前应该将“GET”请求写入流。请参阅asio文档)


我没有使用java.net.URL.openStream()的经验,但它似乎处于更高的级别,只返回回复的正文(而不是标题),负责HTTP重定向等。在这种情况下,是的,libcurl可能更符合您的需要。您还可以查看构建在Boost.Asio之上的库。它仍处于初级阶段,但它似乎已经提供了与Java URL.openStream()提供的内容非常相似的内容。

为了让您的示例发挥作用,我认为您必须在读取流之前在流上编写一个“GET”请求。类似于:
stream谢谢埃里克,我错过了。