我只需要在 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 ),否则,最简单的方法是进行读取(或扫描仪) 消耗你的身体,直到你完成你的模式。
守着星空守着你
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())
}
但是请注意,如果您没有读完响应正文,它将阻止您的客户端重用连接,并且如果有大量传入数据,服务器可能不喜欢您经常提前关闭连接。
- 2 回答
- 0 关注
- 206 浏览
添加回答
举报
0/150
提交
取消