it-swarm.com.de

Wie gehe ich mit Klartext-HTTP um? Erhalten Sie eine Antwort in Golang.

Ich mache eine HTTP-GET-Anforderung an einen Endpunkt, der eine Nur-Text-Antwort zurückgibt.

Wie greife ich die Zeichenfolge der Nur-Text-Antwort?

Mein Code sieht wie folgt aus:

    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
25
TheJediCowboy

Die Antwort des Hauptteils kann mit jeder Methode gelesen werden, die Daten aus dem eingehenden Bytestrom lesen könnte. Am einfachsten ist die ReadAll-Funktion im ioutil-Paket.

responseData,err := ioutil.ReadAll(response.Body)
if err != nil {
    log.Fatal(err)
}

Sie erhalten eine API-Antwort in [] Byte. Wenn die Antwort aus reinem Text besteht, können Sie sie mit der Typkonvertierung leicht in einen String konvertieren:

responseString := string(responseData)

Und überprüfen Sie das Ergebnis 

fmt.Println(responseString)

Beispielprogramm:

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)
}
41
Mayank Patel

Verwenden Sie ioutil.ReadAll(response.Body).

Sie können auch Unicode-Text mit bufio.NewScanner(response.Body) behandeln.
wie dieser Funktionsbeispielcode: 

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

ausgabe: 

*Hello World* B=µH *

Verwenden Sie diesen Beispiel-Webservercode: 

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

Mit io.Copy liest man alle Bytes eines io.Reader und schreibt sie in einen 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