c++ - Websocketpp 简单 HTTP 客户端

标签 c++ websocket websocket++

我用的是优秀的websocketpp在 C++ 应用程序中提供 Websockets(和 HTTP)服务器的库。我还需要在同一个应用程序中使用 HTTP 客户端来连接到 REST API。我也一直在 websocketpp 中尝试这样做,但到目前为止我收效甚微。以下初步尝试为我提供了此日志输出:

[2015-03-06 18:01:18] [connect] Successful connection
[2015-03-06 18:01:18] [error] Server handshake response error: websocketpp.processor:20 (Invalid HTTP status.)
[2015-03-06 18:01:18] [disconnect] Failed: Invalid HTTP status.

这表明我的 http_ 处理程序方法可能需要更多内容。任何意见,将不胜感激。 websocketpp 文档和示例似乎不包含简单的 HTTP 客户端。

#define _WEBSOCKETPP_CPP11_STL_
#include <websocketpp/config/asio_client.hpp>
#include <websocketpp/client.hpp>
#include <websocketpp/common/thread.hpp>

namespace {

using namespace websocketpp;
typedef client<websocketpp::config::asio_client> client;

class Client {
public:

    Client(void){
        client_.init_asio();
        client_.set_http_handler(bind(&Client::http_,this,_1));
    }

    std::string get(const std::string& url) {
        websocketpp::lib::error_code error;
        client::connection_ptr con = client_.get_connection(url,error);
        if(error) std::runtime_error("Unable to connnect.\n  url: "+url+"\n  message: "+error.message());
        client_.connect(con);
        websocketpp::lib::thread asio_thread(&client::run, &client_);
        asio_thread.join();
        return data_;
    }

private:

    void http_(connection_hdl hdl){
        std::cout<<"Connected\n";
        data_ = "http payload";
    }

    client client_;
    std::string data_;
};

}

int main(void){
    Client client;
    client.get("http://google.com/");
}

最佳答案

WebSocket++ 的 HTTP 处理功能是一种方便的功能,旨在允许 WebSocket 服务器以有限的容量提供 HTTP 响应。 WebSocket++ 不打算用作通用 HTTP 库,并且不包含扮演(非 WebSocket)HTTP 客户端角色的能力。

为 HTTP 客户端功能使用单独的库(例如 cpp-netlib)是一个很好的解决方案。

关于c++ - Websocketpp 简单 HTTP 客户端,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28892714/

相关文章:

c++ - 如何实现一次只为 1 个客户端提供服务的 WebSocket 服务器

c++ - websocketpp 和 boost.asio 有什么区别?

c++ - 外部 "C"错误预期 '='、 ','、 ';'、 'asm' 或 '__attribute__' 之前的 'int'

android - 我在高速公路 websocket 中使用 wss 时无法通信,为什么?

java - 在 Jetty 9 上配置 SSL : oeji. SelectorManager :qtp1706748598-22-selector-0: java. lang.NullPointerException

go - 使用 gob 在 Go 中编码 websockets

c++ - 如何在没有 list 的情况下启用视觉样式

c++ - 是否必须初始化成员才能获取其地址?

c++ - Union hack 用于字节序测试和字节交换

c++ - 从websocketpp中的connection或connection_ptr获取 native 套接字描述符?