※この記事は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);
}
}
}