Ich habe versucht, mit Apiary zu arbeiten, und eine universelle Vorlage erstellt, um JSON an den Mock-Server zu senden und diesen Code zu haben:
package main
import (
"encoding/json"
"fmt"
"github.com/jmcvetta/napping"
"log"
"net/http"
)
func main() {
url := "http://restapi3.apiary.io/notes"
fmt.Println("URL:>", url)
s := napping.Session{}
h := &http.Header{}
h.Set("X-Custom-Header", "myvalue")
s.Header = h
var jsonStr = []byte(`
{
"title": "Buy cheese and bread for breakfast."
}`)
var data map[string]json.RawMessage
err := json.Unmarshal(jsonStr, &data)
if err != nil {
fmt.Println(err)
}
resp, err := s.Post(url, &data, nil, nil)
if err != nil {
log.Fatal(err)
}
fmt.Println("response Status:", resp.Status())
fmt.Println("response Headers:", resp.HttpResponse().Header)
fmt.Println("response Body:", resp.RawText())
}
Dieser Code sendet JSON nicht richtig, aber ich weiß nicht warum. Die JSON-Zeichenfolge kann bei jedem Aufruf unterschiedlich sein. Ich kann das nicht verwenden Struct
.
json.Marshall
sie ihn auf. Ich bin mir nicht sicher, warum es bei ihm nicht funktioniert hat.Antworten:
Ich bin nicht mit Nickerchen vertraut, aber die Verwendung von Golangs
net/http
Paket funktioniert gut ( Spielplatz ):quelle
client.Timeout = time.Second * 15
Sie können nur verwenden
post
, um Ihren JSON zu posten.quelle
cannot use jsonValue (type []byte) as type io.Reader in argument to http.Post: []byte does not implement io.Reader (missing Read method)
io.Reader
fürhttp.Post
und bytes.NewBuffer () funktioniert gut in meinem Codebytes.NewBuffer()
aberhttp.NewRequest
anstelle von verwendethttp.Post
)resp.Body
Lesen geschlossen werden. Wenn es sich bei dem bereitgestellten Text um einen handeltio.Closer
, wird er nach der Anforderung geschlossen." Wie kann ich als Go-Neuling feststellen, ob der Körper ein Körper istio.Closer
oder mit anderen Worten, ob dieses Beispiel sicher ist?Wenn Sie bereits eine Struktur haben.
Voller Kern .
quelle
Zusätzlich zum Standardpaket net / http können Sie meine GoRequest verwenden, die sich um net / http dreht und Ihnen das Leben erleichtert, ohne zu viel über json oder struct nachzudenken. Sie können aber auch beide in einer Anfrage kombinieren! (Weitere Details dazu finden Sie auf der Gorequest-Github-Seite.)
Am Ende wird Ihr Code also wie folgt aussehen:
Dies hängt davon ab, wie Sie erreichen möchten. Ich habe diese Bibliothek erstellt, weil ich das gleiche Problem mit Ihnen habe und Code möchte, der kürzer, mit json einfach zu verwenden und in meiner Codebasis und meinem Produktionssystem besser zu warten ist.
quelle
tr := &http.Transport{ TLSClientConfig: &tls.Config{InsecureSkipVerify: true}, }