我正在尝试使用OpenSSL实现从C ++通过SSL / TLS发送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);
}
最佳答案
这与SSL不相关。
您将POST请求的标头部分发送到服务器,但不发送正文(用于发布的数据)。但是服务器只有在收到并处理了请求正文后才会做出响应。这意味着您从服务器的读取将只是阻塞,因为服务器没有发送任何数据。