C言語にて ソケット関数を使って HTTP クライアントを作成する
の続きです。
openssl
OpenSSLは、SSLプロトコルのソフトウェアである。
C言語のライブラリも備えている。
OpenSSL https://www.openssl.org/
下記を参照ください。
MAC に openssl をインストールして開発環境を作る
https://ken-ohwada.hatenadiary.org/entry/2021/02/21/151304
HTTPS クライアント
HTTPSクライアントとは、ウェブサーバ( HTTPS サーバ)に対して、HTTPSプロトコルに則り、 データの送受信を行うプログラムのこと。
この記事で作成するのは、簡単なリクエストを送信し、受信したレスポンスを文字列として表示する簡素なもの。
HTTPS クライアントを作成する
下記を参考にした。
OpenSSL を使って HTTPS クライアントをつくる
https://blog.sarabande.jp/post/82068392478
IPアドレスとポート番号を指定して、 サーバーに接続するところは、 前回の HTTPクライアント と同じです。
サーバーに接続すると、SSLハンドシェイクを行い、データを送受信する。
下記のようなコードになる。
// 初期化 SSL_load_error_strings(); SSL_library_init(); SSL_CTX *ctx = NULL; ctx = SSL_CTX_new( SSLv23_client_method() ); SSL *ssl = NULL; ssl = SSL_new(ctx); // ソケットを生成する int sockfd = socket( AF_INET, SOCK_STREAM, 0 ); // サーバーに接続する connect( sockfd, ... ); // ソケットをSSLに設定する SSL_set_fd( ssl, sockfd ); // SSLサーバーとSSLハンドシェイクを開始する SSL_connect(ssl); // リクエストを送信する SSL_write(ssl, request, strlen(request) ); // レスポンスを受信する SSL_read(ssl, read_buf ); // レスポンスを表示する printf("%s \n", read_buf);
例として、サーバーに example.com を指定して実行すると、 下記のようなレスポンスを表示する
HTTP/1.1 200 OK Content-Type: text/html; charset=UTF-8 <html> <head> <title>Example Domain</title>
Github にコードを公開した。 https://github.com/ohwada/MAC_cpp_Samples/tree/master/openssl/https