※この記事はWindows8RPについて書いていますがわかりません。当然今後のことも本当のところも分かりません。
User-Agent指定してダウンロードするコード
using System.Net.Http; using System.Threading.Tasks; static class Connection { public static async Task<string> Get(string url) { using (var client = new HttpClient()) { client.DefaultRequestHeaders.Add("User-Agent", "Hogezilla"); return await client.GetStringAsync(url); } } }
とっても簡単です。でもこれクッキー使えないんですよね。
そこで、クッキー使えそうなコード。
using System.IO; using System.Net; using System.Text; using System.Threading.Tasks; static class Connection { static CookieContainer cookies = new CookieContainer(); static Encoding enc = Encoding.GetEncoding("Shift-Jis"); public static async Task<string> Get(string url) { HttpWebRequest req = HttpWebRequest.CreateHttp(url); req.CookieContainer = cookies; req.UserAgent = "Hogezilla"; //←そんなプロパティねーよって怒られる req.Headers.Add("User-Agent", "Hogezilla"); //←そんなメソッドねーよって怒られる using (WebResponse res = await req.GetResponseAsync()) using(Stream resStream = res.GetResponseStream()) { byte[] resBytes = new byte[res.ContentLength]; await resStream.ReadAsync(resBytes, 0, resBytes.Length); return enc.GetString(resBytes, 0, resBytes.Length); } } }
確かにここを見るとUser-AgentヘッダーはHeadersプロパティから変えられないからUserAgentプロパティから変更しろって書いてるんだけどなー。
WinRTの時だけ違う方法があるのだろうか。かれこれ数日間悩んでるんで、上手く書けたらアウトプットしますよ。
ってことで数日悩んでやっと出来ました。HttpClientHandlerクラスが鍵でしたね。
using System.Net; using System.Net.Http; using System.Threading.Tasks; static class Connection { static CookieContainer cookies = new CookieContainer(); public static async Task<string> Get2(string url) { using (var handler = new HttpClientHandler()) using (var client = new HttpClient(handler)) { handler.CookieContainer = cookies; client.DefaultRequestHeaders.Add("User-Agent", "Hogezilla"); return await client.GetStringAsync(url); } } }