HTTPS-запрос с Boost.Asio и OpenSSL

Я пытаюсь прочитать символ тикера на 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 )

, все работает нормально.

Исправление:

  1. Я исправил опечатку в заголовках HTTP
  2. Я добавил корневой сертификат и снова включил проверку SSL.

14
задан Vertexwahn 25 January 2017 в 10:42
поделиться