トルネード

毛利のメモ書き

C# HttpClientで画像取得しaspxのResponse.OutputStreamで吐き出す

C# HttpClientで画像を取得する

HttpClientクラスを使って画像を取得しStreamで返す関数です。

private async Task<Stream> Get_httpAsync()
{
    string _u = "http:画像のURL";
    Stream _ms = null;

    using (HttpClient client = new HttpClient())
    {
        var _id = "ベーシック認証のID";
        var _pass = "ベーシック認証のパス";
        var _au = new System.Net.Http.Headers.AuthenticationHeaderValue(
                        "Basic",
                        Convert.ToBase64String(Encoding.ASCII.GetBytes(string.Format("{0}:{1}", _id, _pass))));
        client.DefaultRequestHeaders.Authorization = _au;
        try
        {
            var _resp = client.GetAsync(_u);
            Task.WaitAny(_resp);
            var _hoge = await _resp;
            _ms = await _hoge.Content.ReadAsStreamAsync();
        }
        catch (Exception e) {
            Console.WriteLine(e.Message);
        }
    }
    return _ms;
}

Stream型で画像データが取得できます。

新規aspxから作成したGet_httpAsync()関数をコールする

protected void Page_Load(object sender, EventArgs e)
{
    Task<Stream> _ss = Get_httpAsync();
    Task.WaitAll(_ss);
    byte[] _hogehoge = new byte[_ss.Result.Length];
    _ss.Result.Read(_hogehoge, 0, (int)_ss.Result.Length);
    Response.Clear();
    Response.ContentType = "image/jpeg";
    Response.OutputStream.Write(_hogehoge, 0, (int)_ss.Result.Length);
    Response.End();
}