के साथ HTTPS अनुरोध मैं अपने C++ एप्लिकेशन से https://mtgox.com/api/0/data/ticker.php पर टिकर प्रतीक पढ़ने की कोशिश कर रहा हूं। मैं Boost.Asio और OpenSSL का उपयोग करता हूं क्योंकि सेवा को HTTPS की आवश्यकता होती है।Boost.Asio और OpenSSL
बूस्ट संस्करण: 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");
मैं किसी से सत्यापन सेट क्योंकि हाथ मिलाना अन्यथा विफल रहता है। मुझे यकीन नहीं है कि यह mtgox के साथ एक समस्या है या यह कार्यान्वयन वास्तव में सख्त है क्योंकि जब मैं स्क्रीन पर प्रमाणपत्र मुद्रित करता हूं तो यह कानूनी लगता है (और टिकर पेज पर जाकर क्रोम में कोई समस्या नहीं है)।
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
मैं में जा रहा हूँ
socket_.set_verify_mode(boost::asio::ssl::context::verify_none);
यह अनुरोध मैं भेज है इसके साथ सही दिशा? त्रुटि संदेश समस्या का वास्तव में वर्णनात्मक नहीं है और मुझे नहीं पता कि मैंने कौन सा कदम गलत किया है।
अद्यतन:
curl --trace-ascii out.txt https://mtgox.com/api/0/data/ticker.php
(पूर्ण उत्पादन: http://pastebin.com/Rzp0RnAK) सत्यापन के दौरान विफल रहता है मैं देखना क्या गलत हुआ cURL इस्तेमाल किया। जब मैं "असुरक्षित" पैरामीटर
curl --trace-ascii out.txt -k https://mtgox.com/api/0/data/ticker.php
(पूर्ण उत्पादन: http://pastebin.com/JR43A7ux) के साथ कनेक्ट
सब कुछ ठीक काम करता है।
फिक्स:
- मैं HTTP हेडर
- में टाइपो तय मैं मूल प्रमाणपत्र जोड़ा गया है और पीठ पर एसएसएल सत्यापन बदल गया।
आपने कुंजी क्यों उत्पन्न की? आप कुछ भी हस्ताक्षर नहीं कर रहे हैं, सर्वर है। हालांकि आपको सर्वर के रूट प्रमाण पर भरोसा करना होगा। –
क्या आपने उस अनुरोध को भेजने का प्रयास किया है उदाहरण के लिए कर्ल के माध्यम से यह देखने के लिए कि सर्वर इसे स्वीकार करता है या नहीं? –
अच्छा विचार! मैंने सवाल अपडेट किया है। – Maarten