teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

1

見直しキャンペーン中

2023/07/21 09:29

投稿

TN8001
TN8001

スコア10108

answer CHANGED
@@ -1,74 +1,74 @@
1
- `GET`で`HttpClient`を作り直してるからじゃないですか?
2
- あとクッキーを使いたいだけなら、`UseCookies = true`でいいんじゃないですかね。
3
-
4
- ```C#
5
- using System;
6
- using System.Diagnostics;
7
- using System.Linq;
8
- using System.Net.Http;
9
- using System.Text;
10
- using System.Threading.Tasks;
11
-
12
- namespace Questions251616
13
- {
14
- static class Program
15
- {
16
- static async Task Main()
17
- {
18
- Console.Write("username >>>");
19
- var user = Console.ReadLine();
20
-
21
- Console.Write("password >>>");
22
- var password = Console.ReadLine();
23
-
24
- var obj = new API();
25
- var result = await obj.LoginAsync(user, password);
26
- Console.WriteLine(result);
27
- Console.WriteLine();
28
-
29
- var self = await obj.SelfAsync();
30
- Console.WriteLine(self);
31
-
32
- Console.ReadKey();
33
- }
34
- }
35
-
36
- public class API
37
- {
38
- // 長いw
39
- private static readonly HttpClient client = new HttpClient(new HttpClientHandler() { UseCookies = true, })
40
- {
41
- BaseAddress = new Uri("https://judgeapi.u-aizu.ac.jp/"),
42
- };
43
-
44
- public async Task<string> LoginAsync(string id, string pass)
45
- {
46
- var json = $@"{{""id"":""{id}"",""password"":""{pass}""}}";
47
- Debug.WriteLine(json);
48
-
49
- var content = new StringContent(json, Encoding.UTF8, "application/json");
50
- var response = await client.PostAsync("session", content);
51
- Debug.WriteLine($"content ->> {content}");
52
-
53
- if(response.Headers.Contains("Set-Cookie"))
54
- {
55
- var cookie = response.Headers.GetValues("Set-Cookie").First();
56
- Debug.WriteLine($"cookie --> {cookie}\n");
57
- }
58
-
59
- return await response.Content.ReadAsStringAsync();
60
- }
61
-
62
- public Task<string> SelfAsync() => GetAsync("self");
63
-
64
- public async Task<string> GetAsync(string uri)
65
- {
66
- var response = await client.GetAsync(uri);
67
- return await response.Content.ReadAsStringAsync();
68
- }
69
- }
70
- }
71
- ```
72
-
73
- [.NET(Framework)のHttpClientの取り扱いには要注意という話 - Qiita](https://qiita.com/nskhara/items/b7c31d60531ffbe29537)
1
+ `GET`で`HttpClient`を作り直してるからじゃないですか?
2
+ あとクッキーを使いたいだけなら、`UseCookies = true`でいいんじゃないですかね。
3
+
4
+ ```cs
5
+ using System;
6
+ using System.Diagnostics;
7
+ using System.Linq;
8
+ using System.Net.Http;
9
+ using System.Text;
10
+ using System.Threading.Tasks;
11
+
12
+ namespace Questions251616
13
+ {
14
+ static class Program
15
+ {
16
+ static async Task Main()
17
+ {
18
+ Console.Write("username >>>");
19
+ var user = Console.ReadLine();
20
+
21
+ Console.Write("password >>>");
22
+ var password = Console.ReadLine();
23
+
24
+ var obj = new API();
25
+ var result = await obj.LoginAsync(user, password);
26
+ Console.WriteLine(result);
27
+ Console.WriteLine();
28
+
29
+ var self = await obj.SelfAsync();
30
+ Console.WriteLine(self);
31
+
32
+ Console.ReadKey();
33
+ }
34
+ }
35
+
36
+ public class API
37
+ {
38
+ // 長いw
39
+ private static readonly HttpClient client = new HttpClient(new HttpClientHandler() { UseCookies = true, })
40
+ {
41
+ BaseAddress = new Uri("https://judgeapi.u-aizu.ac.jp/"),
42
+ };
43
+
44
+ public async Task<string> LoginAsync(string id, string pass)
45
+ {
46
+ var json = $@"{{""id"":""{id}"",""password"":""{pass}""}}";
47
+ Debug.WriteLine(json);
48
+
49
+ var content = new StringContent(json, Encoding.UTF8, "application/json");
50
+ var response = await client.PostAsync("session", content);
51
+ Debug.WriteLine($"content ->> {content}");
52
+
53
+ if(response.Headers.Contains("Set-Cookie"))
54
+ {
55
+ var cookie = response.Headers.GetValues("Set-Cookie").First();
56
+ Debug.WriteLine($"cookie --> {cookie}\n");
57
+ }
58
+
59
+ return await response.Content.ReadAsStringAsync();
60
+ }
61
+
62
+ public Task<string> SelfAsync() => GetAsync("self");
63
+
64
+ public async Task<string> GetAsync(string uri)
65
+ {
66
+ var response = await client.GetAsync(uri);
67
+ return await response.Content.ReadAsStringAsync();
68
+ }
69
+ }
70
+ }
71
+ ```
72
+
73
+ [.NET(Framework)のHttpClientの取り扱いには要注意という話 - Qiita](https://qiita.com/nskhara/items/b7c31d60531ffbe29537)
74
74
  を見ると`Static`も`UseCookies = true`も要注意なのですが^^;