簡體   English   中英

OpenSSL-SSL_write問題

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM