如何在Golang中处理纯文本HTTP Get响应?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在Golang中处理纯文本HTTP Get响应?相关的知识,希望对你有一定的参考价值。
我正在向返回纯文本响应的端点发出HTTP GET请求。
如何获取纯文本响应的字符串?
我的代码如下所示:
url := "http://someurl.com"
response,err := http.Get(url)
if err != nil
log.Fatal(err)
defer response.Body.Close()
responseString := //NOT SURE HOW TO GRAB THE PLAIN TEXT STRING
答案
可以使用任何可以从传入字节流中读取数据的方法读取正文的响应。最简单的是ioutil包中提供的ReadAll函数。
responseData,err := ioutil.ReadAll(response.Body)
if err != nil
log.Fatal(err)
它将以[]字节为您提供API响应。如果响应是纯文本,您可以使用类型转换轻松将其转换为字符串:
responseString := string(responseData)
并检查结果
fmt.Println(responseString)
示例程序:
package main
import (
"fmt"
"io/ioutil"
"log"
"net/http"
)
func main()
url := "http://country.io/capital.json"
response, err := http.Get(url)
if err != nil
log.Fatal(err)
defer response.Body.Close()
responseData, err := ioutil.ReadAll(response.Body)
if err != nil
log.Fatal(err)
responseString := string(responseData)
fmt.Println(responseString)
另一答案
使用ioutil.ReadAll(response.Body)
。
您也可以使用bufio.NewScanner(response.Body)
处理Unicode文本
像这个工作示例代码:
package main
import (
"bufio"
"bytes"
"fmt"
"log"
"net/http"
)
func main()
response, err := http.Get("http://127.0.0.1")
if err != nil
log.Fatal(err)
defer response.Body.Close()
scanner := bufio.NewScanner(response.Body)
scanner.Split(bufio.ScanRunes)
var buf bytes.Buffer
for scanner.Scan()
buf.WriteString(scanner.Text())
fmt.Println(buf.String())
输出:
*Hello World* B=µH *
使用此示例Web服务器代码:
package main
import (
"fmt"
"log"
"net/http"
)
func ServeHTTP(w http.ResponseWriter, r *http.Request)
body := "*Hello World* B=µH *"
fmt.Fprint(w, body)
func main()
http.HandleFunc("/", ServeHTTP)
if err := http.ListenAndServe(":80", nil); err != nil
log.Fatal(err)
另一答案
使用io.Copy
,您可以从io.Reader读取所有字节,并将其写入io.Writer
resp, err := http.Get(server.URL + "/v1/ping")
if err != nil
t.Errorf("failed to execute GET request: %s", err)
defer resp.Body.Close()
var b bytes.Buffer
if _, err := io.Copy(&b, resp.Body); err != nil
t.Errorf("failed to copy response body: %s", err)
fmt.Println(b.String())
以上是关于如何在Golang中处理纯文本HTTP Get响应?的主要内容,如果未能解决你的问题,请参考以下文章
golang http库的使用 并发 get post请求处理
如何使用 Golang 的 net/http 包读取流响应正文?