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

質問編集履歴

3

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

2016/08/19 10:45

投稿

Kenichiro_Yama
Kenichiro_Yama

スコア8

title CHANGED
File without changes
body CHANGED
@@ -1,8 +1,78 @@
1
- ###前提・実現したいこと
1
+ ###実現したいこと
2
2
 
3
+ Redmine APIを利用して、チケットの情報をGoogleスプレッドシートで一覧化したい。
3
- Google Apps Script(GAS)Digest認証のかかっているページを通過したい。
4
+ そのために、Google Apps ScriptGASRedmineのDigest認証を通過し
4
- 上記を通過して、Redmineissues.xmlをスプレッドシトに展開したい
5
+ json形式タを取得する必要がある
5
6
  どうすればいいか?
6
7
 
8
+ ###前提
9
+
10
+ - Redmine API(REST API)を利用
11
+ - Googleスプレッドシート(Google Apps Script)を利用
12
+
13
+ ###ソースコード
14
+ 途中まで作ってみました。
15
+ 最後のリクエスト時に、やはり失敗します。
16
+ ```Google Apps Script
17
+ function redmineToGoogleSpreadsheet() {
18
+
19
+ // RedmineのURLを指定
20
+ var redmineUrl = "https://hogehoge.com/projects/hogehoge/";
21
+ var redmineApiKey = "tekitou6T6nbGu5RUjYe3iN5NqrRL3twXtKB8";
22
+ var redmineLimit = 100;
23
+ var url = redmineUrl + "issues.json?key=" + redmineApiKey + "&limit=" + redmineLimit;
24
+
25
+ // optionsを指定
26
+ var options = {
27
+ "validateHttpsCertificates":false,
28
+ "followRedirects":false,
29
+ "muteHttpExceptions":true,
30
+ "escaping":false
31
+ };
32
+
33
+ // 最初のリクエスト
34
+ var response = UrlFetchApp.fetch(url,options);
35
+
36
+ // header情報を格納し、nonceを取得する
37
+ var headers = response.getAllHeaders();
38
+ var key = "WWW-Authenticate";
39
+ var arr = headers[key];
40
+ var arr = arr.split(",");
41
+ var nonce = arr[1].replace('nonce="','').replace('"','');
42
+
43
+ // 値を設定
44
+ var username = "username";
45
+ var realm = "realm";
46
+ var uri = "/projects/hogehoge/issues.json?key=tekitou6T6nbGu5RUjYe3iN5NqrRL3twXtKB8&limit=100";
47
+ var algorithm = "MD5";
48
+ var qop = "auth";
49
+ var nc = "00000001";
50
+ var cnonce = "f16367eeab5979c4";
51
+ var pass = "pass";
52
+
53
+ // 再度リクエストを投げる
54
+ var a1 = username + ":" + realm + ":" + pass;
55
+ var a2 = "GET:" + uri;
56
+
57
+ var da1 = Utilities.computeDigest(Utilities.DigestAlgorithm.MD5, a1);
58
+ var da2 = Utilities.computeDigest(Utilities.DigestAlgorithm.MD5, a2);
59
+ var da3 = da1 + ":" + nonce + ":" + nc + ":" + cnonce + ":" + qop + ":" + da2;
60
+ var response2 = Utilities.computeDigest(Utilities.DigestAlgorithm.MD5, da3);
61
+
62
+ var options2 = {
63
+ 'headers' : {'Authorization' : 'Digest username="' + username + '" , realm="' + realm + '" , nonce="' + nonce + '" , uri="' + uri + '" , algorithm="' + algorithm + '" , response="' + response2 + '" , qop="' + qop + '" , nc="' + nc + '" , cnonce="' + cnonce + '"' },
64
+ "validateHttpsCertificates":false,
65
+ "followRedirects":false,
66
+ "muteHttpExceptions":true,
67
+ "escaping":false
68
+ };
69
+
70
+ // 最後のリクエスト
71
+ var response3 = UrlFetchApp.fetch(url,options2);
72
+
73
+ }
74
+ ```
75
+
76
+ ###備考
7
77
  散々調べましたが、やり方がわからずで、こちらで質問させていただきました。
8
78
  よろしくお願いいたします。

2

App → Apps

2016/08/19 10:45

投稿

Kenichiro_Yama
Kenichiro_Yama

スコア8

title CHANGED
File without changes
body CHANGED
@@ -1,6 +1,6 @@
1
1
  ###前提・実現したいこと
2
2
 
3
- Google App Script(GAS)で、Digest認証のかかっているページを通過したい。
3
+ Google Apps Script(GAS)で、Digest認証のかかっているページを通過したい。
4
4
  上記を通過して、Redmineのissues.xmlをスプレッドシートに展開したい。
5
5
  どうすればいいか?
6
6
 

1

タイトルを修正

2016/08/03 08:19

投稿

Kenichiro_Yama
Kenichiro_Yama

スコア8

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