[英]C++ boost::asio https through proxy
所以我有这段代码可以使用boost :: asio与ssl连接正常工作:
打开了Fiddler,但我完全看不到这些联系。 从我读到的内容中,我得知必须将请求通过代理传递。 因此,我尝试使用所有可以找到的示例和答案进行尝试,但无法使其正常运行。
我得到的最好的是,握手从未触发过回调。
我想念什么?
void performHTTPRequest(std::string host, std::string path) {
std::ostream request_stream(&mRequest);
request_stream << "GET " << path << " HTTP/1.1\r\n";
request_stream << "Host: " << host << "\r\n";
request_stream << "Accept: */*\r\n";
request_stream << "Connection: close\r\n\r\n";
tcp::resolver::query query(host, "https");
mResolver.async_resolve(query,
boost::bind(handle_resolve,
this,
boost::asio::placeholders::error,
boost::asio::placeholders::iterator));
}
void handle_resolve(const boost::system::error_code& err,
tcp::resolver::iterator endpoint_iterator)
{
if (!err)
{
boost::asio::async_connect(mSocket.lowest_layer(),
endpoint_iterator,
boost::bind(&handle_connect, this,
boost::asio::placeholders::error));
}
else
{
delete this;
}
}
void handle_connect(const boost::system::error_code& err)
{
if (!err)
{
mSocket.async_handshake(
boost::asio::ssl::stream_base::handshake_type::client,
boost::bind(&handle_handshake, this,
boost::asio::placeholders::error));
}
else
{
delete this;
}
}
void handle_handshake(const boost::system::error_code& err)
{
if (!err)
{
boost::asio::async_write(mSocket, mRequest,
boost::bind(&handle_write_request, this,
boost::asio::placeholders::error));
}
else
{
delete this;
}
}
void handle_write_request(const boost::system::error_code& err)
{
if (!err)
{
boost::asio::async_read_until(mSocket, mResponse, "\r\n",
boost::bind(&handle_read_status_line, this,
boost::asio::placeholders::error));
}
else
{
delete this;
}
}
void handle_read_status_line(const boost::system::error_code& err)
{
if (!err)
{
std::istream response_stream(&mResponse);
std::string http_version;
response_stream >> http_version;
unsigned int status_code;
response_stream >> status_code;
std::string status_message;
std::getline(response_stream, status_message);
if (!response_stream || http_version.substr(0, 5) != "HTTP/")
{
return;
}
if (status_code != 200)
{
return;
}
}
else
{
delete this;
}
}
似乎只是更改此行:
tcp::resolver::query query(host, "https");
有了这个:
tcp::resolver::query query(proxyUrl, proxyPort);
做到了。
问题是代理配置不允许HTTPS通信。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.