前提・実現したいこと
C#のHttpClientでURIにjsonデータを送り、ログインするというプログラムを作っています。
ログインすることはできたのですが、Cookieの保持がおそらくできておらず、ログイン後のユーザーの情報が得られません。勉強中で初歩的なものかもしれませんが教えていただきたいです。
発生している問題・エラーメッセージ
ログイン(http://developers.u-aizu.ac.jp/api?key=judgeapi/session_POST後に、ユーザーの"self"情報が得られない(ログインのみできる)
下のメッセージはselfのGET(http://developers.u-aizu.ac.jp/api?key=judgeapi%2Fself_GET)を送った時のメッセージです。
[{"id":1102,"code":"INVALID_REFRESH_TOKEN_ERROR","message":"This user is expired."}]``` ```C# ソースコード ```C# class API { //Login private void Login() { string user, password; Console.WriteLine("username >>>"); user = Console.ReadLine(); Console.WriteLine("password >>>"); password = Console.ReadLine(); var task = Task.Run(() => { return Post_Login(user, password); }); var result = task.Result; Console.WriteLine(task.Result); //ログイン情報の表示がされる } async public Task<string> Post_Login(string id, string pass) { var parameters = new Dictionary<string, string>() { }; var json = "{\"id\":\"" + id + "\",\"password\":\"" + pass + "\"}"; Console.WriteLine(json); //json確認用の表示 var content = new StringContent(json, Encoding.UTF8, "application/json"); // クッキー準備 CookieContainer cc = new CookieContainer(); cc.Add(new Uri("https://judgeapi.u-aizu.ac.jp"), new Cookie("test", "value")); using (var handler = new HttpClientHandler()) using (var client = new HttpClient()) { var response = await client.PostAsync($"https://judgeapi.u-aizu.ac.jp/session", content); var cookie = response.Headers.GetValues("Set-Cookie").First(); Console.WriteLine("content ->> " + content); Console.WriteLine("cookie --> " + cookie + "\n"); content.Headers.Add("Cookie", cookie); // クッキー設定 handler.CookieContainer = cc; //クッキー保存 cc = handler.CookieContainer; Console.WriteLine("cc --> " + cc.ToString()); return await response.Content.ReadAsStringAsync(); } } //GET関数 Get(URI)で実行 private void Get(string URI) { var task = Task.Run(() => { return GET(URI); }); string[] numbers = new string[100]; String str = task.Result; System.Console.WriteLine(str); //selfデータの表示(ここでエラーが起きる) } async public Task<string> GET(string URI) { using (var client = new HttpClient()) { var uri = $"" + URI + ""; var response = await client.GetAsync(uri); //UTF-8として変換 return await response.Content.ReadAsStringAsync(); } } public static void Main(string[] args) { API obj = new API(); obj.Login(); //ログインの関数を呼び出す obj.Get("https://judgeapi.u-aizu.ac.jp/self"); //selfデータを得る(この関数内でエラーが起きる)
試したこと
selfのGETを送った際に、ユーザー認証がうまくいっていないので、おそらくCookieの保存がうまくいっていないのではと思いました。
https://teratail.com/questions/14551 色々調べてみたのですが解決できなかったです。
補足情報
visual studio for mac,.Net Framework4.7.2,
http://developers.u-aizu.ac.jp/index
のapiを使っています。
回答2件
あなたの回答
tips
プレビュー