質問編集履歴
3
タイトルの変更
test
CHANGED
@@ -1 +1 @@
|
|
1
|
-
Goでhttpリダイレクト先のurlを取得する方法がわかりません
|
1
|
+
Goでhttpリダイレクト先のurlを取得する方法がわかりません【twitcastingAPI】
|
test
CHANGED
File without changes
|
2
質問がわかりにくかったため、冗長になるかと思い書かなかった詳細を加えました。
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
|
-
|
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/)という記事を見つけ試してみたのですが、
|
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
|
-
|
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 {
|
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
|
-
//
|
109
|
+
baseURL = "https://apiv2.twitcasting.tv/oauth2/authorize"
|
58
110
|
|
111
|
+
values := url.Values{}
|
112
|
+
|
113
|
+
values.Add("client_id", clientID)
|
114
|
+
|
59
|
-
resp
|
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
|
-
|
123
|
+
response, _ := http.Get(baseURL + "?" + values.Encode())
|
66
124
|
|
67
|
-
|
125
|
+
log.Println(response.Header["Location"])
|
68
126
|
|
69
|
-
|
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
|
-
|
151
|
+
リダイレクト云々以前に根本的に間違っている気もするので、トークンの取得方法も交えて教えていただけませんか
|
88
|
-
|
89
|
-
の結果
|
90
|
-
|
91
|
-
`302 Found`が返って来ました
|
1
修正依頼に答えました
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
|
-
|
87
|
+
`log.println(resp.Status)`
|
88
|
+
|
89
|
+
の結果
|
90
|
+
|
91
|
+
`302 Found`が返って来ました
|