当前位置:  开发笔记 > 编程语言 > 正文

如何使用http Response方法读入去?

如何解决《如何使用httpResponse方法读入去?》经验,为你挑选了1个好方法。

自从我处理go以来已经有一段时间了,我似乎忘记了如何阅读文档.

如果我这样做一个get请求......

resp, err := http.Get("https://example.com")

然后我看到,响应具有Body该是一种的io.ReadCloser类型(https://golang.org/pkg/io/#ReadCloser).我看到ReadCloser对界面ReaderCloser.

当我查看Reader界面时,我发现它有一个Read将字节读入的方法p(https://golang.org/pkg/io/#Reader).

回顾一下,http Response有一个主体,它是一个io.ReadCloser接口,它本身包含一个ReaderRead方法的接口.

当我尝试这个时,我希望Read将响应字节转换为HTML,但我什么也看不见......

var html []byte
num, err := resp.Body.Read(html)
fmt.Println("\n\thtml: ", html)
fmt.Printf("\n\tnum: %v, err: %v\n", num, err)

输出:

html:  []
num: 0, err: 

我在这里错过了什么?



1> Sarath Sadas..:

简短的回答:你正在传递一个片段html,其len为'0'而读取读取len(html)字节为html

以下是https://golang.org/pkg/io/#Reader的摘录

读取读取最多len(p)个字节到p.它返回读取的字节数(0 <= n <= len(p))和遇到的任何错误.即使Read返回n

现在你要做的就是ise len(html)并将代码更新为

body, err := ioutil.ReadAll(resp.Body)

或者获取ioutil响应对象并ContentLength使用ContentLength 初始化切片.这是一个示例代码

package main

import (
    "fmt"
    "net/http"
)

func main() {
    var p []byte
    resp, err := http.Get("http://httpbin.org/ip")

    if err != nil {
        fmt.Println("Error making request", err.Error())
        return
    }
    if resp.ContentLength < 0 {
        fmt.Println("No Data returned")
        return
    }
    p = make([]byte, resp.ContentLength)
    resp.Body.Read(p)
    fmt.Println("Response\n", string(p))
}

这里是播放链接,在游乐场http请求不会工作这是一个安全预防措施,所以你可以在你的机器上测试这个

推荐阅读
勤奋的瞌睡猪_715
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有