我想解析一个Web请求的响应,但是我很难以字符串形式访问它.
func main() {
resp, err := http.Get("http://google.hu/")
if err != nil {
// handle error
}
defer resp.Body.Close()
body, err := ioutil.ReadAll(resp.Body)
ioutil.WriteFile("dump", body, 0600)
for i:= 0; i < len(body); i++ {
fmt.Println( body[i] ) // This logs uint8 and prints numbers
}
fmt.Println( reflect.TypeOf(body) )
fmt.Println("done")
}
Run Code Online (Sandbox Code Playgroud)
如何以字符串形式访问响应?ioutil.WriteFile正确写入对文件的响应.
我已经检查了包参考,但它并没有真正帮助.
Von*_*onC 172
bs := string(body) 应该足以给你一个字符串.
从那里,您可以将其用作常规字符串.
有点像这个帖子:
var client http.Client
resp, err := client.Get(url)
if err != nil {
log.Fatal(err)
}
defer resp.Body.Close()
if resp.StatusCode == http.StatusOK {
bodyBytes, err := ioutil.ReadAll(resp.Body)
if err != nil {
log.Fatal(err)
}
bodyString := string(bodyBytes)
log.Info(bodyString)
}
Run Code Online (Sandbox Code Playgroud)
另请参见GoByExample.
正如下面的评论(以及在zzn的回答中),这是一个转换(见规范).
请参阅" 有多贵[]byte(string)? "(反向问题,但同样的结论适用)zzzz提到的地方:
有些转换与转换相同
uint(myIntvar),只是重新解释了位.
索尼娅补充道:
从字节切片中创建一个字符串,肯定涉及在堆上分配字符串.不变性财产迫使这一点.
有时您可以通过[]字节尽可能多地完成工作来优化,然后在最后创建一个字符串.这种bytes.Buffer类型通常很有用.
tsa*_*sch 22
您用于读取http正文响应的方法返回一个字节切片:
func ReadAll(r io.Reader) ([]byte, error)
Run Code Online (Sandbox Code Playgroud)
您可以使用转换[]byte为字符串
body, err := ioutil.ReadAll(resp.Body)
bodyString := string(body)
Run Code Online (Sandbox Code Playgroud)
Alp*_*pha 16
弃用io/ioutil
var client http.Client
resp, err := client.Get(url)
if err != nil {
log.Fatal(err)
}
defer resp.Body.Close()
if resp.StatusCode == http.StatusOK {
bodyBytes, err := io.ReadAll(resp.Body)
// if u want to read the body many time
// u need to restore
// reader := io.NopCloser(bytes.NewReader(bodyBytes))
if err != nil {
log.Fatal(err)
}
bodyString := string(bodyBytes)
log.Info(bodyString)
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
108061 次 |
| 最近记录: |