/ / Golang JSON / HTTP Anfrage wie curl - json, http, locken, gehen

Golang JSON / HTTP Anfrage wie curl - JSON, http, locken, gehen

Ich bin auf der Suche nach einem kurzen Tutorial, wie es gehtführen Sie Anfragen mit Golang durch, die jene emulieren, die man mit curl verwenden würde. Ich habe zwei APIs, mit denen ich kommunizieren möchte, die beide im Wesentlichen auf die gleiche Weise funktionieren. Einer ist ElasticSearch, der andere ist Phillips Hue. Ich weiß, dass beide Bibliotheken in Go haben. Nach dem bin ich nicht mehr, ich versuche zu lernen, wie ich das mache:

$ curl -XGET "http://localhost:9200/twitter/tweet/_search" -d "{
"query" : {
"term" : { "user" : "kimchy" }
} }"

Mit Golang. Alles, was ich finden kann, scheinen Leute schwer zu kodieren

http://url:port/api/_function?something=value?anotherthing=value...

Aber ich habe bereits JSON-Objekte in der Software herumschweben. Gibt es eine Möglichkeit, dass ich die Funktion -d von CURL mit einer JSON-Zeichenfolge oder -Struktur oder etwas Ähnlichem emulieren kann?

Antworten:

17 für die Antwort № 1

Wie commenter @JimB darauf hingewiesen hat, ein GET zu tunAnfrage mit einem Körper ist nicht durch die HTTP / 1.1 Spezifikation verboten; Es ist jedoch auch nicht erforderlich, dass Server den Körper tatsächlich analysieren. Seien Sie also nicht überrascht, wenn Sie auf seltsames Verhalten stoßen.

Das heißt, hier ist, wie Sie eine GET-Anfrage mit einem Körper mit einem Golang HTTP-Client durchführen würden:

reader := strings.NewReader(`{"body":123}`)
request, err := http.NewRequest("GET", "http://localhost:3030/foo", reader)
// TODO: check err
client := &http.Client{}
resp, err := client.Do(request)
// TODO: check err

Der Webserver sieht eine Anfrage wie folgt:

GET /foo HTTP/1.1
Host: localhost:3030
User-Agent: Go 1.1 package http
Content-Length: 12
Accept-Encoding: gzip

{"body":123}

Um ein Befehlszeilentool wie "curl" zu erstellen, müssen Sie eine Reihe von go-Paketen verwenden (z. B. für Flaggenparsing und HTTP-Anfrageabwicklung) aber vermutlich können Sie finden, was Sie von den (ausgezeichneten) Dokumenten benötigen.