猿问

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

我只需要在 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)

有什么方法可以获取几行或避免获取整个响应并匹配模式。


精慕HU
浏览 207回答 2
2回答

慕标琳琳

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

守着星空守着你

不要使用ReadAll,只需读取一个你知道足够大的块来捕获你想要的请求部分// response must be in the first 2048 bytesbuf := make([]byte, 2048)n, err := resp.Body.Read(buf)MyFunction(buf[:n])或通过 io.LimitedReaderbuf, err := ioutil.ReadAll(io.LimitReader(resp.Body, 2048))或者,如果您真的需要通过行阅读, bufio.Scannerscanner := bufio.NewScanner(resp.Body)for i := 0; i < fewLines && scanner.Scan(); i++ {&nbsp; &nbsp; MyFunction(scanner.Bytes())}但是请注意,如果您没有读完响应正文,它将阻止您的客户端重用连接,并且如果有大量传入数据,服务器可能不喜欢您经常提前关闭连接。
随时随地看视频慕课网APP

相关分类

Go
我要回答