http请求后如何得到响应
How to get response after http request
我正在学习围棋,是这个领域的新手。
我在尝试复制一些值时遇到问题。
我正在做的是:
- I want to get some response in [response] using httpRequest.
httpClient := &http.Client{}
response, err := httpClient.Do(req)
if err != nil {
panic(err)
}
- After that, I want to save the stored value in response at 'origin.txt'
origin_ ,_:= ioutil.ReadAll(response.Body)
f_, err := os.Create("origin.txt")
f_.Write(origin_);
- And I want to get a specific value by using goquery package.
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.ReadCloser
。 ioutil.ReadAll()
将使用并存储流中的所有数据。你只能这样做一次。
但是您将数据存储在 origin
中。如果您需要另一个 io.Reader
用于该数据(例如情况 3),那么您可以使该字节切片再次看起来像 io.Reader
:bytes.NewReader(origin)
.
我正在学习围棋,是这个领域的新手。
我在尝试复制一些值时遇到问题。
我正在做的是:
- I want to get some response in [response] using httpRequest.
httpClient := &http.Client{}
response, err := httpClient.Do(req)
if err != nil {
panic(err)
}
- After that, I want to save the stored value in response at 'origin.txt'
origin_ ,_:= ioutil.ReadAll(response.Body)
f_, err := os.Create("origin.txt")
f_.Write(origin_);
- And I want to get a specific value by using goquery package.
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.ReadCloser
。 ioutil.ReadAll()
将使用并存储流中的所有数据。你只能这样做一次。
但是您将数据存储在 origin
中。如果您需要另一个 io.Reader
用于该数据(例如情况 3),那么您可以使该字节切片再次看起来像 io.Reader
:bytes.NewReader(origin)
.