1

当我从我的 go 代码中调用另一个 Web 服务时,我收到一个权限被拒绝的错误。

我的服务器端 go 程序上的部分处理程序代码:

client := http.Client{}
if resp, err := client.Get("http://api.wipmania.com/" + r.RemoteAddr); err != nil {
    c.Errorf("Error getting location from ip: %s", err.Error())
}

从日志中:

Error getting location from ip: Get http://api.wipmania.com/30.30.30.30: permission denied

我在这里看到了类似的 qn 。还是想不通。您能否告诉我执行此操作的正确方法是什么,以及是否必须在 appengine 控制台上设置任何权限?

4

1 回答 1

2

App Engine 应用程序可以与其他应用程序通信,并且可以通过获取 URL 来访问网络上的其他资源。应用程序可以使用URL Fetch 服务来发出 HTTP 和 HTTPS 请求并接收响应。

尝试:

import (
    "fmt"
    "net/http"

    "appengine"
    "appengine/urlfetch"
)

func handler(w http.ResponseWriter, r *http.Request) {
    c := appengine.NewContext(r)
    client := urlfetch.Client(c)
    if resp, err := client.Get("http://api.wipmania.com/" + r.RemoteAddr); err != nil {
        c.Errorf("Error getting location from ip: %s", err.Error())
    }
    // ...
}
于 2012-08-13T13:33:34.193 回答