嘗試接收網站的http響應消息時遇到一些問題。
這是我的函數:在C中使用OpenSSL接收http響應消息
void Reveive_response(char *resp, SSL *ssl) {
const int BUFFER_SIZE = 1024;
char response[1048576];
char *buffer = NULL; // to read from ssl
char *check = (char *) malloc(BUFFER_SIZE*sizeof(char));
int bytes; // number of bytes actually read
int received = 0; // number of bytes received
buffer = (char *) malloc(BUFFER_SIZE*sizeof(char)); // malloc
memset(response, '\0', sizeof(response)); // response
assign = '\0'
do{
memset(buffer, '\0', BUFFER_SIZE); // empty buffer
bytes = SSL_read(ssl, buffer, BUFFER_SIZE);
if (bytes < 0) {
printf("Error: Receive response\n");
exit(0);
}
if (bytes == 0) break;
received += bytes;
printf("Received...%d bytes\n", received);
strncat(response, buffer, bytes); // concat buffer to response
} while (SSL_pending(ssl)); // while pending
response[received] = '\0';
printf("Receive DONE\n");
printf("Response: \n%s\n", response);
free(buffer);
strcpy(resp, response); // return via resp
}
當我調用該函數,這似乎是響應消息是不完整的。就像這樣:
Received...1014 bytes
Received...1071 bytes
Receive DONE
Response:
HTTP/1.1 200 OK
<... something else....>
Vary: Accept-Encoding
Content-Type: text/html
Conne
那麼,如果我再次調用該函數,它返回:
Received...39 bytes
Receive DONE
Response:
ction: keep-alive
Content-Length: 0
中的現場連接被分裂。爲什麼我的功能沒有收到所有的回覆信息?我用while循環裏面。請告訴我我哪裏錯了?謝謝。
謝謝。我會盡快回復你。 – thanhdx
嗨,閱讀更多信息後,我仍然有一些問題: – thanhdx
- 如何閱讀一行文字直到CRLF? SSL_read()按字節讀取緩衝區。我應該讀取字節緩衝區然後解析它來處理每一行?或者逐個讀取字節直到CRLF(它可能運行得很慢)?還是其他什麼? – thanhdx