私は優れたwebsocketppライブラリを使用して、C++ アプリケーションで Websocket (および HTTP) サーバーを提供しています。REST API に接続するには、同じアプリに HTTP クライアントも必要です。私は 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/");
}