我正在尝试从我的C++应用程序中读取https://mtgox.com/api/0/data/ticker.php上的股票代码.我使用Boost.Asio和OpenSSL,因为该服务需要HTTPS.
提升版:1.47.0
OpenSSL:1.0.0d [2011年2月8日] 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");
Run Code Online (Sandbox Code Playgroud)
我将验证设置为none,否则握手失败.我不确定这是否是mtgox的问题,或者这个实现是非常严格的,因为当我将证书打印到屏幕上时它看起来是合法的(当访问自动收报机页面时,chrome没有问题).
socket_.set_verify_mode(boost::asio::ssl::context::verify_none);
Run Code Online (Sandbox Code Playgroud)
这是我发送的请求:
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));
Run Code Online (Sandbox Code Playgroud)
(完整代码: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 …Run Code Online (Sandbox Code Playgroud)