一尘不染

在Go中以字符串形式访问HTTP响应

go

我想解析Web请求的响应,但是在以字符串形式访问它时遇到了麻烦。

func main() {
    resp, err := http.Get("http://google.hu/")
    if err != nil {
        // handle error
    }
    defer resp.Body.Close()
    body, err := ioutil.ReadAll(resp.Body)

    ioutil.WriteFile("dump", body, 0600)

    for i:= 0; i < len(body); i++ {
        fmt.Println( body[i] ) // This logs uint8 and prints numbers
    }

    fmt.Println( reflect.TypeOf(body) )
    fmt.Println("done")
}

如何以字符串形式访问响应?ioutil.WriteFile将响应正确地写入文件。

我已经检查过包参考,但并没有真正的帮助。


阅读 164

收藏
2020-07-02

共1个答案

一尘不染

bs := string(body) 应该足以给你一个字符串。

从那里,您可以将其用作常规字符串。

有点像这个线程

var client http.Client
resp, err := client.Get(url)
if err != nil {
    log.Fatal(err)
}
defer resp.Body.Close()

if resp.StatusCode == http.StatusOK {
    bodyBytes, err := ioutil.ReadAll(resp.Body)
    if err != nil {
        log.Fatal(err)
    }
    bodyString := string(bodyBytes)
    log.Info(bodyString)
}

另请参阅GoByExample

如下所述在zzn的答案中,这是一次转换
(请参阅spec)。

有些转换与强制转换相同,例如uint(myIntvar),只是重新解释了适当的位。

索尼娅补充说:

从字节片中制作字符串,肯定涉及在堆上分配字符串。不变性迫使这一点。
有时,您可以通过使用[]
byte进行尽可能多的工作,然后在最后创建一个字符串来进行优化。该bytes.Buffer类型通常很有用。

2020-07-02