如何使用URL操作在golang中代理GET请求

时间:2018-06-15 15:12:40

标签: go

我想构建一个golang服务,它将监听GET请求,进行一些URL操作,然后将新请求(到被操纵的URL)代理回浏览器:

(来自浏览器 - >服务器)获取http://www.example.com/7fbsjfhfh93hdkwhfbf398fhkef93 ..

(服务器操纵URL - 解密“7fbsjfhfh93hdkwhfbf398fhkef93 ..” - >“my-super-resource”)

(服务器 - >网址资源)GET http://www.somewhereelse.com/my-super-resource

(服务器 - >浏览器)传递给浏览器的http://www.somewhereelse.com/my-super-resource的响应(使用cors)

整个链条需要同步才行。是否有一个像样的代理库允许这种事情?

1 个答案:

答案 0 :(得分:1)

您可以使用Sling包在不到10行代码中执行此类操作:

type Foo struct {
    Bar string `json:"bar"`
}

func Handler(w http.ResponseWriter, r *http.Request) {
    // Get the URL and decrypt it
    url := getUrl(r)
    decryptedUrl := decryptUrl(url)

    // Use the decrypted URL to make a request to another service
    var data *Foo
    req, err := sling.New().Get(decryptedUrl).Receive(data)
    if err != nil {
         // Handle error...
    }

    // Respond to the original request using the data from the other service
    respond(w, http.StatusOK, data)
}