go - 无法使用 baseURL(类型 *url.URL)作为 http.Get 参数中的字符串类型

标签 go webserver

我编写了一个简单的 Web 服务器,它使用 url.ResolveReference 将一些相对路径附加到基本 URL。然后我想使用 http.Get() 获取结果 URL 的内容,但问题是 http.get() 将字符串作为参数,并且我有一个 *url.URL 类型的对象。我该如何解决这个问题?

我的代码如下:

package main

import (
    "fmt"
    "io/ioutil"
    "log"
    "net/http"
    "net/url"
)

func factHandler(w http.ResponseWriter, r *http.Request) {
    str1 := "http://www.meaningfultype.com/"
    u1, _ := url.Parse(str1)
    str2 := "/clarendon.html"
    u2, _ := url.Parse(str2)
    u3 := u1.ResolveReference(u2)
    fmt.Println("url:", u3)
    res, err := http.Get(u3)
    if err != nil {
        log.Fatal(err)
    }
    robots, err := ioutil.ReadAll(res.Body)

    res.Body.Close()
    if err != nil {
        log.Fatal(err)
    }
    contentType := res.Header.Get("Content-Type")
    w.Header().Set("Content-Type", contentType)
    w.Write(robots)
}

最佳答案

调用u3的String()方法,并将返回的字符串传递给http.Get():

package main

import (
    "fmt"
    "io/ioutil"
    "log"
    "net/http"
    "net/url"
)

func factHandler(w http.ResponseWriter, r *http.Request) {
    str1 := "http://www.meaningfultype.com/"
    u1, _ := url.Parse(str1)
    str2 := "/clarendon.html"
    u2, _ := url.Parse(str2)
    u3 := u1.ResolveReference(u2)
    fmt.Println("url:", u3)
    res, err := http.Get(u3.String())         // Change this line
    if err != nil {
        log.Fatal(err)
    }
    robots, err := ioutil.ReadAll(res.Body)

    res.Body.Close()
    if err != nil {
        log.Fatal(err)
    }
    contentType := res.Header.Get("Content-Type")
    w.Header().Set("Content-Type", contentType)
    w.Write(robots)
}

关于go - 无法使用 baseURL(类型 *url.URL)作为 http.Get 参数中的字符串类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43326613/

相关文章:

android - 移动应用程序最好的 Web 服务器技术是什么?

php - 为什么以及何时从 HTTP 响应中省略服务器 header ?

php - 家庭计算机上的 LAMP 堆栈作为公共(public) Web 服务器

json - Golang 解码以数组开头的 json

exception-handling - 在 Golang 中捕捉 panic

go - 如何将中间件添加到 Go 中的子路由器?

html - 打包 NodeWebkit 和 Web 服务器

variables - 在 Nginx 位置规则中使用变量

http - 多次get参数请求只返回第一个参数

json - 动态分配结构