ウェブサイトの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
フィールドの接続が分割されました。なぜ私の機能がすべての応答メッセージを受信しなかったのですか?私は内部をループしていました。どこが間違っていたのか教えてください。ありがとうございました。
ありがとうございました。すぐにお返事します。 – thanhdx
こんにちは、もっと情報を読んだ後で、まだ質問があります: – thanhdx
- CRLFまでテキストの行を読み込むにはどうすればよいですか? SSL_read()はバッファーをバイト単位で読み取ります。私はバイトをバッファに読み込み、それを解析して各行を処理する必要がありますか?または、CRLFまでバイトを1つずつ読み込みます(おそらく遅く実行されます)?それとも何か? – thanhdx