MS VC ++ OpenSSL SSL_read()阻塞

时间:2015-05-07 08:07:23

标签: c++ visual-c++ ssl openssl http-post

我正在尝试使用OpenSSL实现通过SSL / TLS从C ++发送HTTP-POST请求。除SSL_read()部分外,以下实现有效。 SSL_write()成功返回发送的字节数,但SSL_read()只是阻止程序执行。

知道出了什么问题吗?

SSL_CTX *ctx;
SSL *ssl;
char buf[1024];
int server, bytes, recv;

SSL_library_init();
ctx = InitCTX();               // Custom Function   
server = OpenConnection();     // Custom Function
ssl = SSL_new(ctx);
SSL_set_fd(ssl, server);

ostringstream FormBuffer;
FormBuffer << "POST " << FormAction << " HTTP/1.1\n";
FormBuffer << "Host: " << Host << "\n";
FormBuffer << "User-Agent: " << UserAgent << "\n";
FormBuffer << "Content-Type: application/x-www-form-urlencoded\n";
FormBuffer << "Content-Length: " << ContentLength << "\n\n";
FormBuffer << "username=USER&password=PWD\n";
const auto str = FormBuffer.str();

if (SSL_connect(ssl) != -1)
{
    bytes = SSL_write(ssl, str.data(), str.length());
    recv = SSL_read(ssl, buf, sizeof(buf)); // <--- BLOCKING !!!
    ...
    SSL_free(ssl);
}

1 个答案:

答案 0 :(得分:0)

这与SSL无关。 您将POST请求的标题部分发送到服务器,但不发送正文(发布的数据)。但是服务器只会在收到并处理请求主体后才会响应。这意味着您从服务器读取只会阻止,因为服务器不会发送任何数据。