System.NET.Http にある HttpClient を使って、Basic認証をする方法を調べました。
単純にする方法は検索すると、類似サンプルコードが複数でてくるのですが、
恰好良く見えないのです。
もっと綺麗な方法があるに違いないと思ったのですが、そんなことは無かったて話。
Basic認証をする方法(推奨)
var httpClient = new HttpClient(); var byteArray = Encoding.ASCII.GetBytes(string.Format("{0}:{1}", username, password)); httpClient.DefaultRequestHeaders.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue("Basic", Convert.ToBase64String(byteArray));
Basic認証をする方法その2(非推奨)
var credential = new BasicCredentialsProvider(); credential.setCredentials(AuthScope.ANY, new UsernamePasswordCredentials(username, password)); var auth = new BasicAuthCache(); auth.put(targetHost, new BasicScheme()); var context = HttpClientContext.create(); context.setCredentialsProvider(credential); context.setAuthCache(auth);
エンコードとかのコードがなくなって、スマート(行数増えてるけど…)に見えなくもない。
でも、この方法の問題点は、
認証をするために、プリ認証、本認証と2回通信が発生してしまうこと。
認証は成功するんですけどね…。