質問編集履歴

3

タイトルの変更

2017/08/17 20:55

投稿

退会済みユーザー
test CHANGED
@@ -1 +1 @@
1
- Goでhttpリダイレクト先のurlを取得する方法がわかりません
1
+ Goでhttpリダイレクト先のurlを取得する方法がわかりません【twitcastingAPI】
test CHANGED
File without changes

2

質問がわかりにくかったため、冗長になるかと思い書かなかった詳細を加えました。

2017/08/17 20:55

投稿

退会済みユーザー
test CHANGED
File without changes
test CHANGED
@@ -1,6 +1,8 @@
1
1
  # 環境
2
2
 
3
3
  go version go1.8.3 darwin/amd64
4
+
5
+ [twitcastingAPI](http://apiv2-doc.twitcasting.tv/#authorization-code-grant)
4
6
 
5
7
 
6
8
 
@@ -8,27 +10,53 @@
8
10
 
9
11
  Goはhttpリクエストを行ってリダイレクトした場合**自動でリダイレクト先の内容を取ってくる**ようです。
10
12
 
11
- あるAPIを使う際にリダイレクト時のURL文字列内のパラメータが必要になったのですが、自動でリダイレクトを済ませてしまうためURLが取れないということになり困っています。
13
+ ツイキャスのAPIを使う際にリダイレクト時のURL文字列内のパラメータが必要になったのですが、自動でリダイレクトを済ませてしまうためURLが取れないということになり困っています。
12
-
13
-
14
-
15
- "POSTするとリダイレクトするURL" **>リダイレクト>** リダイレクト先のURL ←これが欲しいです。
16
14
 
17
15
 
18
16
 
19
17
  #試したこと
20
18
 
21
- [Go言語でリダイレクト先のURLを取得する](https://zaburo-ch.github.io/post/get-redirect-url-in-go/)という記事を見つけ試してみたのですが、なぜか返ってくるのはリダイレクト先URLではなくダイレクト前、つまりアクセスURLでした。
19
+ [Go言語でリダイレクト先のURLを取得する](https://zaburo-ch.github.io/post/get-redirect-url-in-go/)という記事を見つけ試してみたのですが、GETリクエスト場合はリダイレクト先URLが返ってくるのすが、POSTリクエスの場合は返ってくるのはおかURLでした。
22
20
 
23
21
 
24
22
 
23
+ **そもそもhttpを使ったAPI自体うまく扱えないのでやり方があってるのかわかりません**
24
+
25
+
26
+
27
+ [ツイキャスAPIの冒頭OAuth認証部分](http://apiv2-doc.twitcasting.tv/#implicit)
28
+
29
+ ![ドキュメント](a7ae98aff7dcb9ed79636b2eeb68158d.png)
30
+
31
+
32
+
33
+ これを読んで私は、
34
+
35
+ https://apiv2.twitcasting.tv/oauth2/authorize?client_id={YOUR_CLINET_ID}&response_type=token&state={CSRF_TOKEN}
36
+
37
+ にGETして、
38
+
39
+ ![連携認証](5dd19ff903fa1bf360ac06a0a80bd56c.jpeg)
40
+
41
+ この画面の「**連携アプリを許可**」を押すようなプログラムを書いて、リダイレクト先のURLを取得出来ればいいのかなと思いました。
42
+
43
+
44
+
25
- 以下自分のコードです
45
+ そこで書いたのが以下のコードです
46
+
47
+ CLIENT_IDには[ここ](https://ssl.twitcasting.tv/developer.php)で取得したものを入れています
26
48
 
27
49
 
28
50
 
29
51
  ```go
30
52
 
53
+ package main
54
+
55
+
56
+
31
57
  import (
58
+
59
+ "net/url"
32
60
 
33
61
  "net/http"
34
62
 
@@ -38,39 +66,77 @@
38
66
 
39
67
  )
40
68
 
69
+
70
+
71
+ var (
72
+
73
+ clientID = "CLIENT_ID"
74
+
75
+ csrfToken = "DDxlk"
76
+
77
+ baseURL string
78
+
41
- var RedirectAttemptedError = errors.New("redirect")
79
+ RedirectAttemptedError = errors.New("redirect")
80
+
81
+ )
42
82
 
43
83
 
44
84
 
45
85
  func main() {
46
86
 
87
+ getAuthToken()
88
+
89
+ }
90
+
91
+
92
+
93
+ func getAuthToken() {
94
+
47
95
 
48
96
 
49
97
  http := &http.Client{
50
98
 
51
- CheckRedirect: func(req *http.Request, via []*http.Request) error { return RedirectAttemptedError},
99
+ CheckRedirect: func(req *http.Request, via []*http.Request) error {
100
+
101
+ return RedirectAttemptedError
102
+
103
+ },
52
104
 
53
105
  }
54
106
 
55
107
 
56
108
 
57
- //POSTする
109
+ baseURL = "https://apiv2.twitcasting.tv/oauth2/authorize"
58
110
 
111
+ values := url.Values{}
112
+
113
+ values.Add("client_id", clientID)
114
+
59
- resp, err := http.PostForm("POSTするとリダイレクトするURL", クエリ)
115
+ values.Add("response_type", "token")
116
+
117
+ values.Add("state", csrfToken)
60
118
 
61
119
 
62
120
 
63
- //ここの条件の意味は理解してません
121
+ //https://apiv2.twitcasting.tv/oauth2/authorize?client_id=CLIENT_ID&response_type=token&state=DDxlkにPOSTする
64
122
 
65
- if urlError, ok := err.(*url.Error); ok && urlError.Err == RedirectAttemptedError {
123
+ response, _ := http.Get(baseURL + "?" + values.Encode())
66
124
 
67
- //"POSTするとリダイレクトするURL"が出力される
125
+ log.Println(response.Header["Location"])
68
126
 
69
- log.Println(resp.Header["Location"])
127
+ defer response.Body.Close()
70
-
71
- }
72
128
 
73
129
 
130
+
131
+ //"連携アプリを認証"ボタンが押したい(以下多分やり方が間違っている)
132
+
133
+ baseURL = "https://apiv2.twitcasting.tv/authorize/confirm"
134
+
135
+ values.Del("state")
136
+
137
+ resp, _ := http.PostForm(baseURL, values)
138
+
139
+ log.Println(resp.Header["Location"]) //なぜかリダイレクト先のURLではないものが返ってくる
74
140
 
75
141
  defer resp.Body.Close()
76
142
 
@@ -80,12 +146,6 @@
80
146
 
81
147
 
82
148
 
149
+ このAPIでアクセストークンを取得するところまでに行き着けないです...
83
150
 
84
-
85
- ### 追記
86
-
87
- `log.println(resp.Status)`
151
+ リダイレクト云々以前に根本的に間違っている気もするので、トークンの取得方法も交えて教えていただけませんか
88
-
89
- の結果
90
-
91
- `302 Found`が返って来ました

1

修正依頼に答えました

2017/08/17 20:53

投稿

退会済みユーザー
test CHANGED
File without changes
test CHANGED
@@ -9,6 +9,10 @@
9
9
  Goはhttpリクエストを行ってリダイレクトした場合**自動でリダイレクト先の内容を取ってくる**ようです。
10
10
 
11
11
  あるAPIを使う際にリダイレクト時のURL文字列内のパラメータが必要になったのですが、自動でリダイレクトを済ませてしまうためURLが取れないということになり困っています。
12
+
13
+
14
+
15
+ "POSTするとリダイレクトするURL" **>リダイレクト>** リダイレクト先のURL ←これが欲しいです。
12
16
 
13
17
 
14
18
 
@@ -76,4 +80,12 @@
76
80
 
77
81
 
78
82
 
83
+
84
+
85
+ ### 追記
86
+
79
- "POSTするとリダイレクトするURL" >リダイレクト> リダイレクト先のURL ←これが欲しいです。
87
+ `log.println(resp.Status)`
88
+
89
+ の結果
90
+
91
+ `302 Found`が返って来ました