web-dev-qa-db-ja.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
30
TheJediCowboy

本体の応答は、着信バイトストリームからデータを読み取ることができる任意のメソッドを使用して読み取ることができます。最も簡単なのは、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)
}
46
Mayank Patel

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)
    }
}
2
user6169399

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())
0