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

回答編集履歴

3

誤字の修正

2016/05/19 01:57

投稿

aglkjggg
aglkjggg

スコア769

answer CHANGED
@@ -90,7 +90,7 @@
90
90
  var hash = new HMACSHA512(new UTF8Encoding().GetBytes(API_SECRET)).ComputeHash(new UTF8Encoding().GetBytes(await content.ReadAsStringAsync()));
91
91
  var sign = BitConverter.ToString(hash).ToLower().Replace("-", "");
92
92
 
93
- // WebClientのヘッダにセットする
93
+ // HttpClientのヘッダにセットする
94
94
  httpClient.DefaultRequestHeaders.Add("key", API_KEY);
95
95
  httpClient.DefaultRequestHeaders.Add("Sign", sign);
96
96
 

2

HttpClientを使った方法を追加

2016/05/19 01:57

投稿

aglkjggg
aglkjggg

スコア769

answer CHANGED
@@ -1,3 +1,4 @@
1
+ WebClientを使った方法
1
2
  ```
2
3
  // 参照に以下の2つを追加する。
3
4
  // System.Security
@@ -51,10 +52,72 @@
51
52
  }
52
53
  }
53
54
  }
55
+ ```
54
56
 
57
+ HttpClientを使った方法
55
58
  ```
59
+ using Newtonsoft.Json;
60
+ using System;
61
+ using System.Collections.Generic;
62
+ using System.Net.Http;
63
+ using System.Security.Cryptography;
64
+ using System.Text;
65
+ using System.Threading.Tasks;
56
66
 
67
+ namespace zaif_test_httpclient
68
+ {
69
+ class Program
70
+ {
71
+ static readonly string API_TRADE_ENDPOINT = "https://api.zaif.jp/tapi";
72
+ static readonly string API_KEY = "***";
73
+ static readonly string API_SECRET = "***";
74
+
75
+ static async Task<object> MyTask()
76
+ {
77
+ var httpClient = new HttpClient();
78
+
79
+ // nonce用にunixtimeを用いる
80
+ var unixtime = (int)(DateTime.UtcNow - new DateTime(1970, 1, 1)).TotalSeconds;
81
+
82
+ // POSTするデータ
83
+ var content = new FormUrlEncodedContent(new Dictionary<string, string>
84
+ {
85
+ { "nonce", unixtime.ToString() },
86
+ { "method", "get_info" }
87
+ });
88
+
89
+ // Sign を計算する
90
+ var hash = new HMACSHA512(new UTF8Encoding().GetBytes(API_SECRET)).ComputeHash(new UTF8Encoding().GetBytes(await content.ReadAsStringAsync()));
91
+ var sign = BitConverter.ToString(hash).ToLower().Replace("-", "");
92
+
93
+ // WebClientのヘッダにセットする
94
+ httpClient.DefaultRequestHeaders.Add("key", API_KEY);
95
+ httpClient.DefaultRequestHeaders.Add("Sign", sign);
96
+
97
+ // POST実行
98
+ var res = await httpClient.PostAsync(API_TRADE_ENDPOINT, content);
99
+
100
+ // 結果JSONのデシリアライズ
101
+ var json = JsonConvert.DeserializeObject(await res.Content.ReadAsStringAsync());
102
+
103
+ // 結果を返す
104
+ return json;
105
+ }
106
+
107
+ static void Main()
108
+ {
109
+ Task.Run(async () =>
110
+ {
111
+ var obj = await MyTask();
112
+ Console.WriteLine(obj);
113
+ }).Wait();
114
+
115
+ }
116
+ }
117
+ }
57
118
  ```
119
+
120
+ ```
58
121
  {
59
122
  "success": 1,
60
123
  "return": {

1

参照の情報を追加

2016/05/19 01:46

投稿

aglkjggg
aglkjggg

スコア769

answer CHANGED
@@ -1,4 +1,10 @@
1
1
  ```
2
+ // 参照に以下の2つを追加する。
3
+ // System.Security
4
+ // System.Web
5
+ //
6
+ // NuGetから以下1つのパッケージをインストールする。
7
+ // Newtonsoft.Json
2
8
  using Newtonsoft.Json;
3
9
  using System;
4
10
  using System.Net;