Webアクセスのテスト
いろいろなテスト
https://httpstat.usページは停止されている可能性があります(2023/8/2)
Webアクセスの例外を処理するテスト
例外エラーを考慮しています
非同期処理を実装しています(レスポンス待ちの時、他のボタンなりを押せます)
ちなみに非同期処理を実装していない場合(同期と呼ばれます)
設定するURLは、下記の「テストサーバを使った方法」のURLを指定するといいでしょう
using System;
using System.Net.Http;
using System.Threading.Tasks;
namespace ConsoleApp
{
class Program
{
static async Task Main(string[] args)
{
try
{
HttpClient client = new HttpClient();
string url = "https://google.com";
var response = await client.GetStringAsync(url);
Console.WriteLine("結果=" + response);
}
catch (Exception ex)
{
Console.WriteLine("エラーが発生 " + ex.Message);
}
}
}
}
ページの情報を得るサンプル
try
{
HttpClient client = new HttpClient();
string url = "https://google.com";
var response = await client.GetStringAsync(url);
Console.WriteLine("結果=" + response);
}
catch (Exception ex)
{
Console.WriteLine("エラーが発生 " + ex.Message);
}
ステータスを得るチェックサンプル
try
{
HttpClient client = new HttpClient();
string url = "https://ozuma.sakura.ne.jp/httpstatus/200";
var response = client.GetAsync(url).Result;
Console.WriteLine("結果=" + response.StatusCode);
}
catch (Exception ex)
{
Console.WriteLine("エラーが発生 " + ex.Message);
}
このコードは、C# で書かれた console アプリケーションです。このアプリケーションは、HttpClient クラスを使って HTTP GET リクエストを送信し、Web サーバーから返された文字列を表示することが目的です。
Main
メソッドは、async
キーワードを使って非同期メソッドとして定義されています。このメソッド内では、HttpClient
インスタンスを作成し、指定された URL に対して HTTP GET リクエストを送信するために、GetStringAsync
メソッドを呼び出します。このメソッドは、非同期操作を実行して、Web サーバーから返された文字列を返すため、await
キーワードを使って呼び出します。
結果を表示するために、返された文字列を使って Console.WriteLine
メソッドを呼び出します。このアプリケーションは、何か問題が発生した場合には例外をキャッチすることもできます。例外が発生した場合、catch
ブロック内で、ex.Message
プロパティを使ってエラー メッセージを表示します。
レスポンス時間を調べるテスト
using System;
using System.Net.Http;
using System.Threading.Tasks;
namespace ConsoleApp
{
class Program
{
static async Task Main(string[] args)
{
try
{
HttpClient client = new HttpClient();
string url = "https://httpstat.us/200?sleep=5000";
var start = DateTime.Now;
var response = await client.GetStringAsync(url);
var end = DateTime.Now;
Console.WriteLine("遅延時間: " + (end - start).TotalMilliseconds + "ms");
Console.WriteLine("結果=" + response);
}
catch (Exception ex)
{
Console.WriteLine("エラーが発生 " + ex.Message);
}
}
}
}
このコードは、HTTPクライアントを使用してWeb APIからデータを取得するC# Consoleアプリケーションです。
using
キーワードを使って、必要なライブラリをインポートします。Program
クラスを定義します。Main
メソッドは非同期メソッドとして定義されており、Web APIからのデータ取得タスクを実行します。try-catch
ブロックで例外処理を行います。HttpClient
クラスのインスタンスを生成します。- URLを指定します。
- 開始時刻を記録します。
GetStringAsync
メソッドを使ってWeb APIからデータを取得します。- 終了時刻を記録します。
- 遅延時間を計算して表示します。
- 結果を表示します。
- 例外が発生した場合は、エラーメッセージを表示します。
WebからのJsonレスポンスを取得するテスト
コード
学習のため、例外処理を省き、リソース解放コードを追加指定しています
本来、両方実装する方がいいです
using System;
using System.Net.Http;
using System.Text;
namespace HttpClientSample
{
class Program
{
static async Task Main(string[] args)
{
using (var client = new HttpClient())
{
client.DefaultRequestHeaders.Accept.Clear();
client.DefaultRequestHeaders.Accept.Add(
new System.Net.Http.Headers.MediaTypeWithQualityHeaderValue("application/json"));
var response = await client.GetStringAsync("https://httpstat.us/200");
}
}
}
}
このコードは、C# の HttpClient クラスを使って HTTP GET 要求を送信するサンプルアプリケーションです。
このアプリケーションでは、以下のような流れで HTTP GET 要求を送信します。
HttpClient
クラスのインスタンスを作成する。- インスタンスの
DefaultRequestHeaders.Accept
プロパティをクリアして、application/json
を受け取ることを指定する。 client.GetStringAsync
メソッドを呼び出して HTTP GET 要求を送信する。このメソッドは、非同期に実行される。await
演算子を使って非同期操作の結果(HTTP GET のレスポンスボディ)を取得する。
このサンプルアプリケーションでは、指定された URL(https://httpstat.us/200
)に対して HTTP GET 要求を送信し、レスポンスボディを取得するだけです。
このコードは、.NET FrameworkにおいてHTTP通信を行うためのHttpClientクラスを使用する際の基本的な構文です。
リソースの解放コードについて
using (var client = new HttpClient()){}
using
キーワードを使用することで、var client
はusing
ブロック内でのみ有効なオブジェクトとなります。これにより、client
が不要になった時点で自動的にリソースが解放されるといったメリットがあります。
var client = new HttpClient()
により、新しいHttpClientオブジェクトが作成されます。このオブジェクトは、HTTP通信のために必要な各種情報(エンドポイント、ヘッダー情報など)を持っています。
取得できるJsonレスポンス
{"code":200,"description":"OK"}
整形すると
{
"code": 200,
"description": "OK"
}
テストサーバを使うには
上記コードの次の部分のURLにテストしたいサーバアドレスを代入します
string url = "URL";
Webからのレスポンスステータスを正常(200)を返すテスト
https://httpstat.us/200
Webからのレスポンスが5秒遅延するテスト
https://httpstat.us/200?sleep=5000
テストサーバの参考ブログ
その他、多くのレスポンスコードを返すことができるテストサーバです
WindowsFormsアプリで実装する場合のサンプル
最初のコードを変換したものです
例外エラーを考慮しています
非同期処理を実装しています(レスポンス待ちの時、他のボタンなりを押せます)
ちなみに非同期処理を実装していない場合(同期と呼ばれます)、レスポンス待ちの時にはWindowが固まったように見えます)
using System;
using System.Net.Http;
using System.Windows.Forms;
namespace WindowsFormsApp
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private async void button1_Click(object sender, EventArgs e)
{
try
{
HttpClient client = new HttpClient();
string url = "https://httpstat.us/200";
var response = await client.GetStringAsync(url);
MessageBox.Show("結果=" + response);
}
catch (Exception ex)
{
MessageBox.Show("エラーが発生 " + ex.Message);
}
}
}
}
汎用性があるように少し変更
これで、GetDataAsyncメソッドは単独のタスクとして分離されました。このタスクは、多くのボタンクリックイベントなどで再利用することができます。
using System;
using System.Net.Http;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace WindowsFormsApp
{
public partial class Form1 : Form
{
private readonly HttpClient _client = new HttpClient();
private const string URL = "URL";
public Form1()
{
InitializeComponent();
}
private async void button1_Click(object sender, EventArgs e)
{
try
{
var response = await GetDataAsync();
MessageBox.Show("結果=" + response);
}
catch (Exception ex)
{
MessageBox.Show("エラーが発生 " + ex.Message);
}
}
private async Task<string> GetDataAsync()
{
return await _client.GetStringAsync(URL);
}
}
}
ディスカッション
コメント一覧
まだ、コメントがありません