質問編集履歴

3

内容の詳細を記入し、途中までのソースコードを張り付ける

2016/08/19 10:45

投稿

Kenichiro_Yama
Kenichiro_Yama

スコア8

test CHANGED
File without changes
test CHANGED
@@ -1,15 +1,155 @@
1
- ###前提・実現したいこと
1
+ ###実現したいこと
2
2
 
3
3
 
4
4
 
5
- Google Apps Script(GAS)、Digest認証のかかっているページを通過したい。
5
+ Redmine APIを利用して、チケットの情報をGoogleスプレッドシート一覧化したい。
6
6
 
7
- 上記を通過して、Redmineのissues.xmlスプレッドシートに展開たい。
7
+ そのためにGoogle Apps Script(GAS)でRedmineのDigest認証通過
8
+
9
+ json形式のデータを取得する必要がある。
8
10
 
9
11
  どうすればいいか?
10
12
 
11
13
 
12
14
 
15
+ ###前提
16
+
17
+
18
+
19
+ - Redmine API(REST API)を利用
20
+
21
+ - Googleスプレッドシート(Google Apps Script)を利用
22
+
23
+
24
+
25
+ ###ソースコード
26
+
27
+ 途中まで作ってみました。
28
+
29
+ 最後のリクエスト時に、やはり失敗します。
30
+
31
+ ```Google Apps Script
32
+
33
+ function redmineToGoogleSpreadsheet() {
34
+
35
+
36
+
37
+ // RedmineのURLを指定
38
+
39
+ var redmineUrl = "https://hogehoge.com/projects/hogehoge/";
40
+
41
+ var redmineApiKey = "tekitou6T6nbGu5RUjYe3iN5NqrRL3twXtKB8";
42
+
43
+ var redmineLimit = 100;
44
+
45
+ var url = redmineUrl + "issues.json?key=" + redmineApiKey + "&limit=" + redmineLimit;
46
+
47
+
48
+
49
+ // optionsを指定
50
+
51
+ var options = {
52
+
53
+ "validateHttpsCertificates":false,
54
+
55
+ "followRedirects":false,
56
+
57
+ "muteHttpExceptions":true,
58
+
59
+ "escaping":false
60
+
61
+ };
62
+
63
+
64
+
65
+ // 最初のリクエスト
66
+
67
+ var response = UrlFetchApp.fetch(url,options);
68
+
69
+
70
+
71
+ // header情報を格納し、nonceを取得する
72
+
73
+ var headers = response.getAllHeaders();
74
+
75
+ var key = "WWW-Authenticate";
76
+
77
+ var arr = headers[key];
78
+
79
+ var arr = arr.split(",");
80
+
81
+ var nonce = arr[1].replace('nonce="','').replace('"','');
82
+
83
+
84
+
85
+ // 値を設定
86
+
87
+ var username = "username";
88
+
89
+ var realm = "realm";
90
+
91
+ var uri = "/projects/hogehoge/issues.json?key=tekitou6T6nbGu5RUjYe3iN5NqrRL3twXtKB8&limit=100";
92
+
93
+ var algorithm = "MD5";
94
+
95
+ var qop = "auth";
96
+
97
+ var nc = "00000001";
98
+
99
+ var cnonce = "f16367eeab5979c4";
100
+
101
+ var pass = "pass";
102
+
103
+
104
+
105
+ // 再度リクエストを投げる
106
+
107
+ var a1 = username + ":" + realm + ":" + pass;
108
+
109
+ var a2 = "GET:" + uri;
110
+
111
+
112
+
113
+ var da1 = Utilities.computeDigest(Utilities.DigestAlgorithm.MD5, a1);
114
+
115
+ var da2 = Utilities.computeDigest(Utilities.DigestAlgorithm.MD5, a2);
116
+
117
+ var da3 = da1 + ":" + nonce + ":" + nc + ":" + cnonce + ":" + qop + ":" + da2;
118
+
119
+ var response2 = Utilities.computeDigest(Utilities.DigestAlgorithm.MD5, da3);
120
+
121
+
122
+
123
+ var options2 = {
124
+
125
+ 'headers' : {'Authorization' : 'Digest username="' + username + '" , realm="' + realm + '" , nonce="' + nonce + '" , uri="' + uri + '" , algorithm="' + algorithm + '" , response="' + response2 + '" , qop="' + qop + '" , nc="' + nc + '" , cnonce="' + cnonce + '"' },
126
+
127
+ "validateHttpsCertificates":false,
128
+
129
+ "followRedirects":false,
130
+
131
+ "muteHttpExceptions":true,
132
+
133
+ "escaping":false
134
+
135
+ };
136
+
137
+
138
+
139
+ // 最後のリクエスト
140
+
141
+ var response3 = UrlFetchApp.fetch(url,options2);
142
+
143
+
144
+
145
+ }
146
+
147
+ ```
148
+
149
+
150
+
151
+ ###備考
152
+
13
153
  散々調べましたが、やり方がわからずで、こちらで質問させていただきました。
14
154
 
15
155
  よろしくお願いいたします。

2

App → Apps

2016/08/19 10:45

投稿

Kenichiro_Yama
Kenichiro_Yama

スコア8

test CHANGED
File without changes
test CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
 
4
4
 
5
- Google App Script(GAS)で、Digest認証のかかっているページを通過したい。
5
+ Google Apps Script(GAS)で、Digest認証のかかっているページを通過したい。
6
6
 
7
7
  上記を通過して、Redmineのissues.xmlをスプレッドシートに展開したい。
8
8
 

1

タイトルを修正

2016/08/03 08:19

投稿

Kenichiro_Yama
Kenichiro_Yama

スコア8

test CHANGED
@@ -1 +1 @@
1
- Google App Script(GAS)でDigest認証を通過するには?
1
+ Google Apps Script(GAS)でDigest認証を通過するには?
test CHANGED
File without changes