VB.NET HttpClient の使い方

(Visual Studio 2015 版)

投稿日 2015/11/08

[Home] | VB.NET インデックス

概要

System.Net.HTTP.HttpClient クラスを使用すると、HTTP クライアントを簡単に作成できます。ただし、このクラスのメソッドは非同期動作なので Async / Await に習熟している必要があります。


サンプル

ウェブページを表示するサンプル

下のサンプルは HttpClient オブジェクトを作成してその GetAsync メソッドでレスポンスオブジェクトを取得します。さらに、レスポンスオブジェクトの Content.ReadAsStringAsync メソッドを使ってレスポンスの内容 (HTML) を取得して表示しています。

Imports System.Net.Http

''' <summary>
''' response.Content.ReadAsStringAsync() を使ってページを読む。
''' </summary>
Module Module1
    ''' <summary>
    ''' メイン
    ''' </summary>
    ''' <param name="args"></param>
    Sub Main(ByVal args As String())
        Dim url As String = "http://localhost"
        If args.Length > 0 Then
            url = args(0)
        End If
        ' ページを読むためのタスクを作成
        Dim task As Task = Receive(url)
        ' タスクの完了を待つ。
        task.Wait()
#If DEBUG Then
        Console.WriteLine("終わり")
        Console.ReadKey()
#End If
    End Sub
    
    ''' <summary>
    ''' ページを読むための非同期関数
    ''' </summary>
    ''' <param name="url">URL</param>
    ''' <returns></returns>
    Async Function Receive(ByVal url As String) As Task
        ' HTTP クライアントオブジェクトを構築
        Dim client = New HttpClient()
        ' HTTP レスポンスを得る。
        Dim response As HttpResponseMessage = Await client.GetAsync(url)
        ' レスポンスから内容を文字列として取得する。
        Dim content As String = Await response.Content.ReadAsStringAsync() 
        Console.WriteLine(content)
    End Function
End Module

HttpClient の GetStringAsync を使う例

このサンプルは機能的には前と同じですが、HttpClient の GetStringAsync メソッドを使うことで簡略化しています。

Imports System.Net.Http

''' <summary>
''' client.GetStringAsync(url) を使ってページを読む。
''' </summary>
Module Module1
    ''' <summary>
    ''' メイン
    ''' </summary>
    ''' <param name="args"></param>
    Sub Main(ByVal args As String())
        If args.Length = 0 Then
            Console.WriteLine("URL を指定してください。")
            Exit Sub
        End If
        ' ページを読むためのタスクを作成
        Dim task As Task = Receive(args(0))
        ' タスクの完了を待つ。
        task.Wait()
#If DEBUG Then
        Console.WriteLine("終わり")
        Console.ReadKey()
#End If
    End Sub
    
    ''' <summary>
    ''' ページを読むための非同期関数
    ''' </summary>
    ''' <param name="url"></param>
    ''' <returns></returns>
    Async Function Receive(ByVal url As String) As Task
        ' HTTP クライアントオブジェクトを構築
        Dim client = New HttpClient()
        ' クライアントからページの内容を文字列として読む。
        Dim content = Await client.GetStringAsync(url)
        Console.WriteLine(content)
    End Function
    
End Module

レスポンスヘッダーの取得

このサンプルは、レスポンスオブジェクトの Headers プロパティの内容一覧を表示するものです。

Imports System.Net.Http

''' <summary>
''' レスポンスヘッダーを表示
''' </summary>
Module Module1

    ''' <summary>
    ''' メイン
    ''' </summary>
    ''' <param name="args"></param>
    Sub Main(ByVal args As String())
        Dim url As String = "http://localhost"
        If args.Length > 0 Then
            url = args(0)
        End If
        ' ページを読むためのタスクを作成
        Dim task As Task = Receive(url)
        ' タスクの完了を待つ。
        task.Wait()
#If DEBUG Then
        Console.WriteLine("終わり")
        Console.ReadKey()
#End If
    End Sub
    
    ''' <summary>
    ''' ページを読むための非同期関数
    ''' </summary>
    ''' <param name="url">URL</param>
    ''' <returns></returns>
    Async Function Receive(ByVal url As String) As Task
        Dim client = New HttpClient() ' HTTP クライアントオブジェクトを構築
        ' HTTP レスポンスを得る。
        Dim response As HttpResponseMessage = Await client.GetAsync(url)
        ' ヘッダー一覧を表示する。
        For Each item In response.Headers
            Console.WriteLine("{0}:{1}", item.Key, String.Join(",", item.Value))
        Next
    End Function
    
End Module

レスポンスの内容をストリームとして取得する例

このサンプルは、レスポンスの Content プロパティをストリーム (バイナリー) として取得するものです。

Imports System.Net.Http
Imports System.IO

''' <summary>
''' Stream として読む。
''' </summary>
Module Module1

    Sub Main(ByVal args As String())
        Dim url As String = "http://localhost"
        If args.Length > 0 Then
            url = args(0)
        End If
        ' ページを読むためのタスクを作成
        Dim task As Task = Receive(url)
        ' タスクの完了を待つ。
        task.Wait()
#If DEBUG Then
        Console.WriteLine("終わり")
        Console.ReadKey()
#End If
    End Sub
    
    ''' <summary>
    ''' ページを読むための非同期関数
    ''' </summary>
    ''' <param name="url">URL</param>
    ''' <returns></returns>
    Async Function Receive(ByVal url As String) As Task
        Dim buffer(256) As Byte
        ' HTTP クライアントオブジェクトを構築
        Dim client = New HttpClient()
        ' HTTP レスポンスを得る。
        Dim response As HttpResponseMessage = Await client.GetAsync(url)
        Dim stream = Await response.Content.ReadAsStreamAsync()
        ' stream から表示する。
        Dim ct As Integer = stream.Read(buffer, 0, buffer.Length)
        While ct > 0
            For i = 0 To ct - 1
                Console.Write("{0:x2} ", buffer(i))
            Next
            ct = stream.Read(buffer, 0, buffer.Length)
        End While
        Console.WriteLine()
    End Function
    
End Module

 

 


 

 開設 2014年12月   著作権 2014-2015 bonk.red  連絡先: こちらからメッセージを送ってください。

 このページの先頭へ..