我正在尝试使用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);
}
答案 0 :(得分:0)
这与SSL无关。 您将POST请求的标题部分发送到服务器,但不发送正文(发布的数据)。但是服务器只会在收到并处理请求主体后才会响应。这意味着您从服务器读取只会阻止,因为服务器不会发送任何数据。