Back to Top

Monthly Archives: 12月 2016

VB.NET WebClient asyncとawaitの使い方

 WebClientクラスを使用して async と await の基本的な使い方の説明を記載します。

使用するメソッドは、同期(DownloadString)、非同期(DownloadStringTaskAsync)を使用して説明します。

同期メソッドDownloadString を使用してダウンロード

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    Dim url As Uri = New Uri("http://microsoft.com")

    Dim client = New WebClient()

    Debug.WriteLine("--- Start ---")
    Dim s = client.DownloadString(url)
    Debug.WriteLine(s)
    Debug.WriteLine("--- End ---")
End Sub

表示結果は

--- Start ---
<html><head> ・・・(省略)
--- End ---

次に

非同期メソッドDownloadStringTaskAsync を使用してダウンロード

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    Dim url As Uri = New Uri("http://microsoft.com")

    Dim client = New WebClient()

    Debug.WriteLine("--- Start ---")
    Dim s = client.DownloadStringTaskAsync(url)
    Debug.WriteLine(s)
    Debug.WriteLine("--- End ---")
End Sub

表示結果

--- Start ---
System.Threading.Tasks.Task`1[System.String]
--- End ---

ダウンロードされた内容が取得できません。

そこで、Async と Await を使用して内容を取得します。

非同期での Async と Awaitの使用方法

Private Async Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    Dim url As Uri = New Uri("http://microsoft.com")

    Dim client = New WebClient()

    Debug.WriteLine("--- Start ---")

    Dim task As Task(Of String) = client.DownloadStringTaskAsync(url)
    Debug.WriteLine(task)
    Debug.WriteLine("--- End ---")

    Debug.WriteLine("--- Await Start ---")
    Dim s As String = Await task            'ここで処理待ちをする
    Debug.WriteLine(s)
    Debug.WriteLine("--- Await End ---")
End Sub

表示結果

--- Start ---
System.Threading.Tasks.Task`1[System.String]
--- End ---
--- Await Start ---
<html><head> ・・・省略

--- Await End ---

上記のいらないところを消して簡単にすると

Private Async Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    Dim url As Uri = New Uri("http://microsoft.com")

    Dim client = New WebClient()
    Dim s As String = Await client.DownloadStringTaskAsync(url)
    Debug.WriteLine(s)
End Sub

 

VB.NET HttpWebRequestによるHTTP通信

HttpWebRequestを使用して、HTTP通信をする方法を記載します。

・System.Netをインポートします。

HTTP通信

Dim html As String = ""

Dim cookie As CookieContainer = New CookieContainer()

Dim httpReq As HttpWebRequest = HttpWebRequest.Create("http://microsoft.com")

'クッキーを設定
httpReq.CookieContainer = cookie

'GET通信に設定(GET・POSTを指定)
httpReq.Method = "GET"

'ユーザー名とパスワードを設定
httpReq.Credentials = New NetworkCredential("username", "password")

'サーバー応答を受信するためのHttpWebResponseを取得
Using httpRes As HttpWebResponse = httpReq.GetResponse()

    'HTTPヘッダー表示
    For Each s As String In httpRes.Headers
        Console.WriteLine(s)
    Next

    '応答データを受信するためのStreamを取得
    Using Strm As System.IO.Stream = httpRes.GetResponseStream()
        Using sr As New System.IO.StreamReader(Strm, System.Text.Encoding.UTF8)
            'データをすべて受信
            html = sr.ReadToEnd()
        End Using
    End Using

End Using

'取得したデータを表示する
Console.WriteLine(html)

※Credentials は、ログインとパスワードがいるサイトのみ設定します。

※CookieContainer のクッキーの設定は、クッキーを使用するサイトの時のみで、クッキーを使用しないサイトは必要ないです。

※Method は通常GETがデフォルトなので、POSTの時のみ設定が必要です。