小编典典

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

all

我想解析 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将响应正确写入文件。

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


阅读 71

收藏
2022-07-13

共1个答案

小编典典

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

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

有点像这个线程
(在Go 1.16 – Q1 2021 –
ioutildeprecation
:
ioutil.ReadAll()=>之后更新io.ReadAll()):

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 := io.ReadAll(resp.Body)
    if err != nil {
        log.Fatal(err)
    }
    bodyString := string(bodyBytes)
    log.Info(bodyString)
}

另请参阅GoByExample

如下所述(以及回答中),这是一种转换
(参见规范)。
请参阅“有多贵[]byte(string)
”(相反的问题,但同样的结论适用)其中提到:

一些转换与强制转换相同,例如uint(myIntvar),它只是重新解释到位的位。
补充道:

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

2022-07-13