[英]OpenSSL - SSL_write problem
我用C语言编写了一个HTTPS客户端 ,但SSL_write函数有问题。 三个测试来说明我的问题:
#define HEADERS1 "GET / HTTP/1.1\r\n"
#define HEADERS2 "Host: www.example.com\r\n"
#define HEADERS3 "User-Agent: OpenSSL\r\n"
#define HEADERS4 "\r\n"
#define HEADERS "GET / HTTP/1.1\r\nHost: www.example.com\r\nUser-Agent: OpenSSL\r\n\r\n"
测试1:
SSL_write(ssl,HEADERS,strlen(HEADERS));
成功:服务器正确返回带有HTTP / 1.1 200代码的/index.html资源。
测试2:
SSL_write(ssl,HEADERS1,strlen(HEADERS1));
SSL_write(ssl,HEADERS2,strlen(HEADERS2));
SSL_write(ssl,HEADERS3,strlen(HEADERS3));
SSL_write(ssl,HEADERS4,strlen(HEADERS4));
失败:服务器未返回任何信息。 所有SSL_write函数均不返回ERROR,但我的应用程序被锁定在SSL_read上,因为目标服务器不提供内容...,也没有标题:(
测试3:
SSL_write(ssl,HEADERS1,strlen(HEADERS1));
SSL_write(ssl,HEADERS2,strlen(HEADERS2));
SSL_write(ssl,HEADERS4,strlen(HEADERS4));
成功:服务器正确返回带有HTTP / 1.1 200代码的/index.html资源。
我可以调用SSL_write发送标头的次数有特定限制吗? 很奇怪...
非常感谢你 !
好的,所以我的问题一直存在,但是我有更多详细信息:
IISS-SSL =>所有测试均成功。
Apache-SSL =>所有测试成功。
Nginx-SSL =>所有测试成功。
LightHTTPD-SSL =>测试2失败。
我不明白为什么只有LightHTTPD无法理解我的请求...
对于SSL_Write()操作,正确的方法应该在SSL_Write调用之后,检查返回的消息。 如果它是SSL_WANT_READ,则花一点时间让它读取。
使用返回值进行连续写入操作可能会成功,但是这样做并不安全,因为您不确定写入的数据是否已到达服务器,并且服务器无法完全读取它。
反过来,这可能会影响其他SSL_write操作。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.