मैं गो में एक POST अनुरोध में JSON स्ट्रिंग कैसे भेजूं




rest go (2)

आप बस अपने जेसन post करने के लिए post का उपयोग कर सकते हैं।

values := map[string]string{"username": username, "password": password}

jsonValue, _ := json.Marshal(values)

resp, err := http.Post(authAuthenticatorUrl, "application/json", bytes.NewBuffer(jsonValue))

मैंने Apiary के साथ काम करने की कोशिश की और जेएसओएन को नकली सर्वर भेजने के लिए एक सार्वभौमिक टेम्पलेट बनाया और यह कोड है:

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

}

यह कोड JSON को ठीक से नहीं भेजता है, लेकिन मुझे नहीं पता क्यों। JSON स्ट्रिंग प्रत्येक कॉल में अलग हो सकती है। मैं इसके लिए Struct उपयोग नहीं कर सकता।


मानक नेट / GoRequest पैकेज के अलावा, आप मेरे GoRequest का उपयोग करने पर विचार कर सकते हैं जो नेट / http के आसपास लपेटता है और GoRequest या स्ट्रक्चर के बारे में बहुत कुछ सोचने के बिना अपना जीवन आसान बनाता है। लेकिन आप एक अनुरोध में दोनों को मिलाकर मैच भी कर सकते हैं! (आप gorequest github पेज में इसके बारे में अधिक जानकारी देख सकते हैं)

तो, अंत में आपका कोड अनुसरण की तरह बन जाएगा:

func main() {
    url := "http://restapi3.apiary.io/notes"
    fmt.Println("URL:>", url)
    request := gorequest.New()
    titleList := []string{"title1", "title2", "title3"}
    for _, title := range titleList {
        resp, body, errs := request.Post(url).
            Set("X-Custom-Header", "myvalue").
            Send(`{"title":"` + title + `"}`).
            End()
        if errs != nil {
            fmt.Println(errs)
            os.Exit(1)
        }
        fmt.Println("response Status:", resp.Status)
        fmt.Println("response Headers:", resp.Header)
        fmt.Println("response Body:", body)
    }
}

यह इस बात पर निर्भर करता है कि आप कैसे हासिल करना चाहते हैं। मैंने इस पुस्तकालय को बनाया क्योंकि मुझे आपके साथ एक ही समस्या है और मुझे कोड चाहिए जो छोटा है, जेसन के साथ उपयोग करना आसान है, और मेरे कोडबेस और उत्पादन प्रणाली में अधिक रखरखाव योग्य है।





apiary