C言語にて ソケット関数を使って HTTP クライアントを作成する

C言語にて ソケット関数を使って TCP クライアントを作成する
の続きです

HTTP クライアント

HTTP クライアントとは、 ウェブサーバ(HTTPサーバ) に対して、HTTPプロトコルに則り、 データの送受信を行うプログラムのこと。

この記事で作成するのは、簡単なリクエストを送信し、 受信したレスポンスを文字列として表示する簡素なもの。

例えば、example.com に対して、下記のようなリクエストを送信する。

host: example.com
port: 80
GET / HTTP/1.1
Accept: /
Host: example.com
Connection: close

HTTP クライアントを作成する

下記を参考にした。

C 言語で HTTP クライアントを作ってみよう
http://x68000.q-e-d.net/~68user/net/c-http-1.html

下記のようなコードになる。

// ソケットを生成する
int  sockfd  = socket( AF_INET, SOCK_STREAM, 0 );

// IPアドレスとポート番号を指定して、ソケットアドレス構造体を作る
struct sockaddr_in sock_addr;
sock_addr.sin_family = AF_INET;
sock_addr.sin_addr.s_addr = inet_addr( ipaddress );
sock_addr.sin_port = htons( port );

// サーバーに接続する
connect( sockfd , (struct sockaddr *)&sock_addr, sizeof(sock_addr) );

// リクエストを送信する
write( sockfd , request, strlen(request) );

// レスポンスを受信する
read( sockfd , read_buf, BUFSIZE );

// レスポンスを表示する
printf("%s \n", read_buf);

実行すると、 下記のようなレスポンスを表示する

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/network/http