如何在http请求后获得响应



我正在学习围棋,是这个领域的新手。

当我试图复制一些值时,我遇到了一个问题。

我正在做的是:

  1. 我想使用httpRequest在[response]中获得一些响应
httpClient := &http.Client{}
response, err := httpClient.Do(req)
if err != nil {
panic(err)
}
  1. 之后,我想将响应中存储的值保存在'origin.txt'
origin_ ,_:= ioutil.ReadAll(response.Body)
f_, err := os.Create("origin.txt")
f_.Write(origin_);
  1. 我想通过使用goquery包来获得一个特定的值
doc, err := goquery.NewDocumentFromReader(response.Body)
if err != nil {
log.Fatal(err)
}
doc.Find(".className").Each(func(i int, s *goquery.Selection) {
w.WriteString("============" + strconv.Itoa(i) + "============")
s.Find("tr").Each(func(i int, s_ *goquery.Selection) {
fmt.Println(s_.Text())
w.WriteString(s_.Text())    
})
}

)

但在这种情况下,我可以从2(中得到我想要的值,但不能从3(中得到任何值。

首先,我认为问题是,3(处的响应对象受到2(操作的影响。因为它是一个引用对象。

所以我试着把它复制到另一个对象上,然后再做一次。

origin := *response

但是,我得到了和第一个一样的结果。

我该怎么办?如何通过引用值将其分配给另一个引用值?

每次尝试我应该请求两次吗?

我实际上不知道在2和3之间在哪里使用共享资源。

然而,话虽如此,origin := *response不会给你带来太多好处。数据(response.Body(是io.ReadCloserioutil.ReadAll()将消耗并存储流所具有的所有数据。你只能做一次。

但是,数据存储在origin中。如果该数据需要另一个io.Reader(比如情况3(,那么您可以使该字节切片再次看起来像io.Readerbytes.NewReader(origin)

相关内容

  • 没有找到相关文章

最新更新