Я не могу получить информацию от MtGox API через библиотеку WebSockets C++ с именем websocketpp:
#include <websocketpp/config/asio_no_tls_client.hpp>
#include <websocketpp/client.hpp>
#include <iostream>
typedef websocketpp::client<websocketpp::config::asio_client> client;
using websocketpp::lib::placeholders::_1;
using websocketpp::lib::placeholders::_2;
using websocketpp::lib::bind;
typedef websocketpp::config::asio_client::message_type::ptr message_ptr;
void on_open(websocketpp::connection_hdl hdl)
{
std::cout << "on_open \n";
}
void on_close(websocketpp::connection_hdl hdl)
{
std::cout << "on_close \n";
}
void on_message(client* c, websocketpp::connection_hdl hdl, message_ptr msg)
{
std::cout << msg->get_payload() << '\n';
}
int main()
{
client c;
try
{
c.init_asio();
c.set_open_handler(on_open);
c.set_close_handler(on_close);
c.set_message_handler(bind(&on_message, &c, ::_1, ::_2));
websocketpp::lib::error_code ec;
client::connection_ptr con = c.get_connection("ws://websocket.mtgox.com:80/mtgox?Currency=EUR", ec);
c.connect(con);
c.run();
}
catch (const std::exception& e)
{
std::cout << e.what() << std::endl;
}
catch (websocketpp::lib::error_code e)
{
std::cout << e.message() << std::endl;
}
catch (...)
{
std::cout << "other exception" << std::endl;
}
}
Вывод
[2013-11-18 23:10:10] [подключиться] Успешное подключение
[2013-11-18 23:10:14] [ошибка] Ответ сервера на рукопожатие был недействительным: неверный статус HTTP.
[2013-11-18 23:10:14] [отключить] Ошибка: неверный статус HTTP.
В отладчике я вижу запрещенную ошибку 403, но я могу использовать ее через такие сервисы, как http://www.websocket.org/echo.html.
Я уже пытался использовать ws://socketio.mtgox.com:80/mtgox?Currency=EUR, но получил следующую ошибку:
[2013-11-18 23:18:07] [подключить] Успешное подключение
[2013-11-18 23:18:08] [ошибка] ошибка в handle_read_http_response: конец файла
[2013-11-18 23:18:08] [отключить] Ошибка: конец файла
Что не так с этим кодом?