为了账号安全,请及时绑定邮箱和手机立即绑定

Go中的http获取请求(获取几行)

Go中的http获取请求(获取几行)

Go
精慕HU 2021-12-06 19:39:05
我只需要在 go lang 中获得 a ) 请求的前几行。http.Get(<url>有什么办法可以做到。我不需要整个响应。我需要匹配一个仅出现在前几行的模式。获取整个响应并获取正则表达式使其非常非常慢,因为响应中的字符数非常大。这是最快的方法。目前我正在做http.Get(<url>)// 返回响应ioutil.readAll(response of the above url)// 返回一个字节数组 MyFunction(search for reg exp in the byte array)有什么方法可以获取几行或避免获取整个响应并匹配模式。
查看完整描述

2 回答

?
慕标琳琳

TA贡献1830条经验 获得超9个赞

如果您知道需要从响应中读取多少内容,则可以使用 LimitReader ( https://golang.org/pkg/io/#LimitedReader ),否则,最简单的方法是进行读取(或扫描仪) 消耗你的身体,直到你完成你的模式。


查看完整回答
反对 回复 2021-12-06
?
守着星空守着你

TA贡献1799条经验 获得超8个赞

不要使用ReadAll,只需读取一个你知道足够大的块来捕获你想要的请求部分


// response must be in the first 2048 bytes

buf := make([]byte, 2048)

n, err := resp.Body.Read(buf)

MyFunction(buf[:n])

或通过 io.LimitedReader


buf, err := ioutil.ReadAll(io.LimitReader(resp.Body, 2048))

或者,如果您真的需要通过行阅读, bufio.Scanner


scanner := bufio.NewScanner(resp.Body)

for i := 0; i < fewLines && scanner.Scan(); i++ {

    MyFunction(scanner.Bytes())

}

但是请注意,如果您没有读完响应正文,它将阻止您的客户端重用连接,并且如果有大量传入数据,服务器可能不喜欢您经常提前关闭连接。


查看完整回答
反对 回复 2021-12-06
  • 2 回答
  • 0 关注
  • 206 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信