HTTPS è proprio come HTTP, ma è incapsulato in un livello SSL crittografico. Dovrai usare una libreria come OpenSSL per effettuare quelle connessioni HTTPS.
OpenSSL fornirà funzioni che sostituiscono quelle socket.h, per connettere, leggere e scrivere HTTP regolare (o qualsiasi altro protocollo tu voglia utilizzare) attraverso un canale SSL, rendendo la gestione della parte SSL trasparente per te.
https
le richieste sembrano proprio http
richieste, ma con crittografia trasparente dell'effettiva comunicazione tra il client e il server, e su una diversa porta predefinita. La buona notizia è che la crittografia trasparente ti consente di programmare proprio come se stessi scrivendo un normale client HTTP. La cattiva notizia è che la crittografia è abbastanza complessa da richiedere una libreria specializzata per implementarla per te.
Una di queste librerie è OpenSSL. Usando OpenSSL, il codice minimo per un client sarebbe simile a questo:
#include <openssl/ssl.h>
// first connect to the remote as usual, but use the port 443 instead of 80
// initialize OpenSSL - do this once and stash ssl_ctx in a global var
SSL_load_error_strings ();
SSL_library_init ();
SSL_CTX *ssl_ctx = SSL_CTX_new (SSLv23_client_method ());
// create an SSL connection and attach it to the socket
SSL *conn = SSL_new(ssl_ctx);
SSL_set_fd(conn, sock);
// perform the SSL/TLS handshake with the server - when on the
// server side, this would use SSL_accept()
int err = SSL_connect(conn);
if (err != 1)
abort(); // handle error
// now proceed with HTTP traffic, using SSL_read instead of recv() and
// SSL_write instead of send(), and SSL_shutdown/SSL_free before close()