質問編集履歴
3
不要なコード削除
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
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版)を追記しました
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 /
|
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
|
```
|