httpクライアントを作ってみる
※ なにひとつHTMLレンダリングしません。
txtAddress に ホスト名を入れて、これを実行すると、txtHeader, txtBody にそれぞれレスポンスが入ります。
' 指定したホストの80番ポートにつなげて "GET / HTTP/1.1" を送信し、 ' 受信したデータを、ヘッダ部とボディ部と分けて、テキストボックスに書き出します。 ' ソケットをTCP/IPで作成 ' UDP/IP の場合は SocektType を Dgram にする(はず) Dim socket As New System.Net.Sockets.Socket(Net.Sockets.AddressFamily.InterNetwork, Net.Sockets.SocketType.Stream, Net.Sockets.ProtocolType.IP) ' ホスト名からIPアドレス取得 ' 存在しないホスト名を探そうとした場合、例外発生 Dim hostEntry As System.Net.IPHostEntry = System.Net.Dns.GetHostByName(txtAddress.Text) ' 面倒くさいから、リストのうち先頭のIPアドレスを取得 Dim addr As System.Net.IPAddress = hostEntry.AddressList(0) ' IPアドレス と ポート(80) をセットにしたオブジェクト生成 Dim endpoint As System.Net.EndPoint = New System.Net.IPEndPoint(addr, 80) ' endpoint をもとに、ソケット生成 socket.Connect(endpoint) ' ストリーム生成 Dim stream As New System.Net.Sockets.NetworkStream(socket) ' stream から StreamWriter 生成 Dim writer As New System.IO.StreamWriter(stream) ' サーバに送る場合の改行記号は vblf = &h0A と指定 ' Windows系はデフォルトでは &h0c, &h0a の2バイト writer.NewLine = vbLf ' GETコマンド送信 writer.WriteLine("GET / HTTP/1.0") ' Agent等のフィールドを送信 writer.WriteLine("Agent: test") ' 空白行を1行入れるとヘッダ部終了 writer.WriteLine() ' 念のためフラッシュ writer.Flush() ' stream から StreamReader 生成 Dim reader As New System.IO.StreamReader(stream) ' 状態 ' 0 : ヘッダ部を読んでいる ' 1 : ボディ部を読んでいる Dim st As Integer = 0 Do Dim str = reader.ReadLine() If str Is Nothing Then Exit Do End If Select Case st Case 0 ' ヘッダ部を読んでいる ' 空白行が出たら、次の行からボディ部 If str = "" Then ' ボディ部を読んでいる状態に遷移 st = 1 Else ' テキスト追加 txtHeader.Text = txtHeader.Text & str & vbCrLf End If Case 1 ' ボディ部を読んでいる ' テキスト追加 txtBody.Text = txtBody.Text & str & vbCrLf End Select Loop socket.Close()