gpt4 book ai didi

c - OpenSSL - SSL_write 问题

转载 作者:太空宇宙 更新时间:2023-11-03 23:56:05 25 4
gpt4 key购买 nike

我用 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 函数都不返回错误,但我的应用程序被锁定在 SSL_read 上,因为目标服务器没有提供任何内容......也没有 header :(

测试 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 发送 header 的次数是否有特定限制?很奇怪...

非常感谢!


好的,所以我的问题仍然存在,但我有更多详细信息:

IISS-SSL => 所有测试成功。

Apache-SSL => 所有测试成功。

Nginx-SSL => 所有测试成功。

LightHTTPD-SSL => 测试 2 失败。

我不明白为什么只有 LightHTTPD 不理解我的请求...

最佳答案

对于 SSL_Write() 操作,正确的方法应该是在 SSL_Write 调用之后,检查返回的消息。如果它是 SSL_WANT_READ,则给它一些少量的时间来读取它。

通过检查返回值进行连续写入操作可能会成功,但它并不安全,因为您无法确定您写入的数据是否已到达服务器并且服务器已完全读取它。

这反过来可能会影响其他 SSL_write 操作。

关于c - OpenSSL - SSL_write 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7217688/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com