我正在学习OpenSSL库。
这是我的密码
#include <openssl/ssl.h>
#include <openssl/bio.h>
#include <openssl/err.h>
#include <stdio.h>
void connect_openssl();
int main (int argc, char **argv)
{
CRYPTO_malloc_init();
SSL_library_init();
SSL_load_error_strings();
ERR_load_BIO_strings();
OpenSSL_add_all_algorithms();
connect_openssl();
return 0;
}
void connect_openssl()
{
BIO *bio = BIO_new_connect("google.com:80");
char buffer[1024];
if (bio == NULL)
{
printf("Error creating BIO! \n");
//ERR_print_errors(stderr);
return;
}
if (BIO_do_connect(bio) <= 0)
{
printf("Failed to connect! \n");
return;
}
char buff[1024];;
char send[1024];
memset(send, 0, sizeof(send));
strcat(send, "GET / HTTP/1.1\nHost:google.com\nUser Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)\nConnection: Close\n\n");
BIO_puts(bio, send);
while (1)
{
int x = BIO_read(bio, buff, sizeof(buff)-1);
if (x == 0)
{
printf("x==0\n");
break;
}
else if (x < 0)
{
if (! BIO_should_retry(bio))
{
printf("\nRead failed!\n");
BIO_free_all(bio);
return;
}
}
else
{
buffer[x] = 0;
printf("DATA:\n\n");
printf("%s", buffer);
}
}
BIO_free_all(bio);
return;
}
问题是BIO_read()始终返回0值。有人能告诉我这个密码有什么问题吗?
最佳答案
自动应答:
啊,愚蠢的问题:/
犯了错误的申请工作是两行
buffer[x] = 0;
printf("%s", buffer);
这应该是
buff[x] = 0;
printf("%s", buff);
当然我需要更多的睡眠。