在默认浏览器中使用参数打开 url

open url with parameters in default browser

如果我们尝试从 Go 打开给定的 URL,这很容易,如下面的代码所示(对于 mac):

exec.Command("open", "https://google.com").Run()

但是如果 URL 有参数,我们如何做同样的事情呢?

例如,如果我们尝试打开 facebook 登录 URL: "https://www.facebook.com/v11.0/dialog/oauth?client_id=123456&redirect_uri=https://example/com", 命令失败,退出状态为 1.

即使我们为特殊字符 ?、& 和 = 添加反斜杠也是如此。 URL 更改为 https://www.facebook.com/v11.0/dialog/oauth\?client_id\=123456\&redirect_uri\=https://example/com

以上URL如果我们使用

在默认浏览器中打开

open https://www.facebook.com/v11.0/dialog/oauth\?client_id\=123456\&redirect_uri\=https://example/com

终端中的命令。但是在 Go 中这样做会失败!

有没有办法在 Go 中做同样的事情?

是的,可以使用 exec.Command("open", "-a", "safari", url) 来完成。但这不会打开默认浏览器,这是用户最有可能登录的地方。

尝试附加反斜杠(\)

exec.Command("open", "https://www.facebook.com/v11.0/dialog/oauth\?client_id/\=123456/\&redirect_uri/\=https://example/com").Run()

它实际上在没有反斜杠的情况下工作。原来终端需要反斜杠,因为终端在将字符串发送到浏览器之前在内部转义了反斜杠。但是在go的情况下,它只是将原始字符串发送到浏览器。

在 Go 中使用:

exec.Command("open", "https://www.facebook.com/v11.0/dialog/oauth?client_id=123456&redirect_uri=https://example/com")

从终端命令行:

open https://www.facebook.com/v11.0/dialog/oauth\?client_id\=123456\&redirect_uri\=https://example/com