Как установить соединение с сайтом по https из программы на c++?

Пользователь

от willa_will , в категории: C/C++ , год назад

Как установить соединение с сайтом по https из программы на c++?

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

1 ответ

Пользователь

от raina , год назад

@willa_will 

Для установки соединения с сайтом по https из программы на C++ можно использовать библиотеку OpenSSL.


Пример кода:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
#include 
#include 
#include 

void ssl_connect(const char *hostname, const int port)
{
    SSL_library_init();
    SSL_CTX *ssl_ctx = SSL_CTX_new(TLS_client_method());

    BIO *bio = BIO_new_ssl_connect(ssl_ctx);

    BIO_get_ssl(bio, NULL);
    BIO_set_conn_hostname(bio, hostname);
    BIO_set_conn_port(bio, std::to_string(port).c_str());

    if (BIO_do_connect(bio) <= 0)
    {
        ERR_print_errors_fp(stderr);
        exit(EXIT_FAILURE);
    }
    else
    {
        printf("Connected to %s:%d
", hostname, port);
    }

    SSL *ssl;
    SSL_CTX_set_verify(ssl_ctx, SSL_VERIFY_NONE, NULL);
    SSL_CTX_set_verify_depth(ssl_ctx, 1);
    SSL_CTX_set_options(ssl_ctx, SSL_OP_NO_SSLv2 | SSL_OP_NO_SSLv3);

    ssl = SSL_new(ssl_ctx);
    SSL_set_bio(ssl, bio, bio);

    if (SSL_connect(ssl) < 0)
    {
        ERR_print_errors_fp(stderr);
        exit(EXIT_FAILURE);
    }
    else
    {
        printf("SSL connection established
");
    }

    SSL_CTX_free(ssl_ctx);
    SSL_shutdown(ssl);
    SSL_free(ssl);
}


В данном примере используется функция ssl_connect, которая принимает на вход строку с именем хоста и число, обозначающее порт. Внутри функции происходит инициализация библиотеки OpenSSL, создание контекста SSL, установка соединения с сайтом и установка SSL соединения. Затем происходит разрыв соединения.