teratail header banner
teratail header banner
質問するログイン新規登録

質問編集履歴

3

不要なコード削除

2017/11/28 10:16

投稿

amuzac
amuzac

スコア14

title CHANGED
File without changes
body CHANGED
@@ -176,8 +176,6 @@
176
176
  ssl_sock.next_layer() = std::mode( sock );
177
177
 
178
178
  // handshake
179
- ip::tcp::resolver::query query2( "xxxx.com", "https" );
180
- ip::tcp::endpoint endpoint2( *resolver.resolve( query2 ) );
181
179
  ssl_sock.handshake( asio::ssl::stream_base::client, err );
182
180
 
183
181
  if( err ){

2

該当ソースの修正版update

2017/11/28 10:16

投稿

amuzac
amuzac

スコア14

title CHANGED
File without changes
body CHANGED
@@ -166,20 +166,20 @@
166
166
  cout << "http_version: " << http_version << endl;
167
167
  cout << "status_code: " << status_code << endl;
168
168
  cout << "status_message: " << status_message << endl;
169
-
170
- sock.close();
171
169
  }
172
170
 
173
171
  // SSL sock
174
172
  asio::ssl::context context( io_service, asio::ssl::context::sslv23 );
175
173
  asio::ssl::stream<ip::tcp::socket> ssl_sock( io_service, context );
176
174
 
175
+ // move from sock to SSL sock
176
+ ssl_sock.next_layer() = std::mode( sock );
177
+
178
+ // handshake
177
179
  ip::tcp::resolver::query query2( "xxxx.com", "https" );
178
180
  ip::tcp::endpoint endpoint2( *resolver.resolve( query2 ) );
179
- ssl_sock.lowest_layer().connect( endpoint2, err );
180
-
181
- // handshake
182
181
  ssl_sock.handshake( asio::ssl::stream_base::client, err );
182
+
183
183
  if( err ){
184
184
  boost::system::error_code code = err;
185
185
  boost::system::system_error e( err );

1

該当ソースコードの修正版(FIX版)を追記しました

2017/11/28 09:28

投稿

amuzac
amuzac

スコア14

title CHANGED
File without changes
body CHANGED
@@ -62,7 +62,7 @@
62
62
  // send & recv
63
63
  {
64
64
  stringstream ss_msg;
65
- ss_msg << "GET /Auth HTTP/1.0\r\n";
65
+ ss_msg << "GET /xxx HTTP/1.0\r\n";
66
66
  ss_msg << "Host: xxxx.com \r\n";
67
67
  ss_msg << "\r\n";
68
68
 
@@ -101,4 +101,115 @@
101
101
  return 0;
102
102
  }
103
103
 
104
+ ```
105
+ ---
106
+ **4. 該当ソースコード(修正版)**
107
+ 解決時の修正版コードです。
108
+ ```
109
+ #include <boost/asio.hpp>
110
+ #include <boost/asio/ssl.hpp>
111
+ #include <iostream>
112
+ #include <sstream>
113
+
114
+ namespace asio = boost::asio;
115
+ namespace ip = asio::ip;
116
+ using namespace std;
117
+
118
+ int main( int argc, char* argv[] )
119
+ {
120
+ try {
121
+ // error code
122
+ boost::system::error_code err = boost::asio::error::host_not_found;
123
+
124
+ // sock
125
+ asio::io_service io_service;
126
+ ip::tcp::socket sock( io_service );
127
+
128
+ // proxy
129
+ ip::tcp::resolver resolver( io_service );
130
+ ip::tcp::resolver::query query( "43.255.22.186", "8080" );
131
+ ip::tcp::endpoint endpoint( *resolver.resolve( query ) );
132
+
133
+ // connect
134
+ sock.connect( endpoint, err );
135
+ if( err ){
136
+ boost::system::error_code code = err;
137
+ boost::system::system_error e( err );
138
+ long lastResult = code.value();
139
+ string errorString = e.what();
140
+ sock.close();
141
+ cout << "connect failed: " << errorString << "(" << err << ")" << endl;
142
+ }
143
+
144
+ // send & recv
145
+ {
146
+ stringstream ss_proxy;
147
+ ss_proxy << "CONNECT xxxx.com:443 HTTP/1.0\r\n\r\n";
148
+
149
+ asio::streambuf req;
150
+ ostream req_ostream( &req );
151
+ req_ostream << ss_proxy.str();
152
+ asio::write( sock, req );
153
+
154
+ asio::streambuf res;
155
+ asio::read_until( sock, res, "\r\n" );
156
+
157
+ istream is_res( &res );
158
+ string http_version;
159
+ unsigned int status_code;
160
+ string status_message;
161
+
162
+ is_res >> http_version;
163
+ is_res >> status_code;
164
+ getline( is_res, status_message );
165
+
166
+ cout << "http_version: " << http_version << endl;
167
+ cout << "status_code: " << status_code << endl;
168
+ cout << "status_message: " << status_message << endl;
169
+
170
+ sock.close();
171
+ }
172
+
173
+ // SSL sock
174
+ asio::ssl::context context( io_service, asio::ssl::context::sslv23 );
175
+ asio::ssl::stream<ip::tcp::socket> ssl_sock( io_service, context );
176
+
177
+ ip::tcp::resolver::query query2( "xxxx.com", "https" );
178
+ ip::tcp::endpoint endpoint2( *resolver.resolve( query2 ) );
179
+ ssl_sock.lowest_layer().connect( endpoint2, err );
180
+
181
+ // handshake
182
+ ssl_sock.handshake( asio::ssl::stream_base::client, err );
183
+ if( err ){
184
+ boost::system::error_code code = err;
185
+ boost::system::system_error e( err );
186
+ long lastResult = code.value();
187
+ string errorString = e.what();
188
+ ssl_sock.lowest_layer().close();
189
+ cout << "handshake failed: " << errorString << "(" << err << ")" << endl;
190
+ }
191
+
192
+ // send & recv
193
+ {
194
+ stringstream ss_msg;
195
+ ss_msg << "GET /xxx HTTP/1.0\r\n";
196
+ ss_msg << "Host: xxxx.com \r\n";
197
+ ss_msg << "\r\n";
198
+
199
+ asio::streambuf req;
200
+ ostream req_ostream( &req );
201
+ req_ostream << ss_msg.str();
202
+ asio::write( ssl_sock, req );
203
+
204
+ asio::streambuf res;
205
+ asio::read_until( ssl_sock, res, "\r\n" );
206
+ cout << &res << endl;
207
+ }
208
+ }
209
+ catch( std::exception& e ){
210
+ cout << endl << "[exception] " << e.what() << endl;
211
+ }
212
+
213
+ return 0;
214
+ }
104
215
  ```