所以我收到的服务器请求看起来像这样
http://localhost:8080/#access_token=tokenhere&scope=scopeshere
我似乎找不到从网址解析令牌的方法。
如果#是?我可以解析一个标准的查询参数。
我试图在/甚至是完整的URL之后获取所有内容,但没有运气。
非常感谢任何帮助。
编辑:
所以我现在已经解决了这个问题,正确的答案是你无法在GO中真正做到这一点。所以我创建了一个简单的包,它将在浏览器端执行,然后将令牌发送回服务器。
如果你想在GO中尝试做局部抽搐API,请查看它:
答案 0 :(得分:6)
锚点部分甚至(通常)不是由客户端发送到服务器。
例如,浏览器不发送它。
答案 1 :(得分:1)
对于解析网址,请使用golang net / url 包:https://golang.org/pkg/net/url/
OBS:您应该使用授权标头来发送身份验证令牌。
示例代码,包含示例网址中提取的数据:
package main
import (
"fmt"
"net"
"net/url"
)
func main() {
// Your url with hash
s := "http://localhost:8080/#access_token=tokenhere&scope=scopeshere"
// Parse the URL and ensure there are no errors.
u, err := url.Parse(s)
if err != nil {
panic(err)
}
// ---> here is where you will get the url hash #
fmt.Println(u.Fragment)
fragments, _ := url.ParseQuery(u.Fragment)
fmt.Println("Fragments:", fragments)
if fragments["access_token"] != nil {
fmt.Println("Access token:", fragments["access_token"][0])
} else {
fmt.Println("Access token not found")
}
// ---> Others data get from URL:
fmt.Println("\n\nOther data:\n")
// Accessing the scheme is straightforward.
fmt.Println("Scheme:", u.Scheme)
// The `Host` contains both the hostname and the port,
// if present. Use `SplitHostPort` to extract them.
fmt.Println("Host:", u.Host)
host, port, _ := net.SplitHostPort(u.Host)
fmt.Println("Host without port:", host)
fmt.Println("Port:",port)
// To get query params in a string of `k=v` format,
// use `RawQuery`. You can also parse query params
// into a map. The parsed query param maps are from
// strings to slices of strings, so index into `[0]`
// if you only want the first value.
fmt.Println("Raw query:", u.RawQuery)
m, _ := url.ParseQuery(u.RawQuery)
fmt.Println(m)
}
// part of this code was get from: https://gobyexample.com/url-parsing