Я пытаюсь прочитать символ тикера на https://mtgox.com/api/0/data/ticker.php из моего приложения C ++. Я использую Boost.Asio и OpenSSL, потому что сервис требует HTTPS.
Версия Boost: 1.47.0
OpenSSL: 1.0.0d [8 февраля 2011 г.] Win32
Для приложения; Я взял пример из http://www.boost.org/doc/libs/1_47_0/doc/html/boost_asio/example/ssl/client.cpp чтобы начать работу, и измените его следующим образом:
Это то место, куда я хочу подключиться:
boost::asio::ip::tcp::resolver::query query("mtgox.com", "443");
Я установил проверку на none, потому что в противном случае рукопожатие не будет выполнено. Я не уверен, является ли это проблемой с mtgox или эта реализация действительно строгая, потому что, когда я печатаю сертификат на экране, он выглядит нормальным (и у Chrome нет проблем с этим при посещении страницы тикера).
socket_.set_verify_mode(boost::asio::ssl::context::verify_none);
Это это запрос, который я отправляю:
std::stringstream request_;
request_ << "GET /api/0/data/ticker.php HTTP/1.1\r\n";
request_ << "Host: mtgox.com\r\n";
request_ << "Accept-Encoding: *\r\n";
request_ << "\r\n";
boost::asio::async_write(socket_, boost::asio::buffer(request_.str()), boost::bind(&client::handle_write, this, boost::asio::placeholders::error, boost::asio::placeholders::bytes_transferred));
(полный код: http://pastebin.com/zRTTqZVe )
Я столкнулся со следующей ошибкой:
Connection OK!
Verifying:
/C=IL/O=StartCom Ltd./OU=Secure Digital Certificate Signing/CN=StartCom Certification Authority
Sending request:
GET /api/0/data/ticker.php HTTP 1.1
Host: mtgox.com
Accept-Encoding: *
Sending request OK!
Read failed: An existing connection was forcibly closed by the remote host
Я иду в правильном направлении с этот? Сообщение об ошибке на самом деле не описывает проблему, и я не знаю, какой шаг я сделал неправильно.
Обновление: Я использовал cURL, чтобы узнать, что пошло не так:
curl --trace-ascii out.txt https://mtgox.com/api/0/data/ticker.php
(полный вывод: http://pastebin.com/Rzp0RnAK ) Это не удается во время проверки. Когда я подключаюсь с параметром «небезопасно»
curl --trace-ascii out.txt -k https://mtgox.com/api/0/data/ticker.php
(полный вывод: http://pastebin.com/JR43A7ux )
, все работает нормально.
Исправление: