गो में POST रिक्वेस्ट कैसे भेजें?


84

मैं एक पोस्ट अनुरोध करने की कोशिश कर रहा हूं, लेकिन मैं इसे पूरा नहीं कर सकता। दूसरी तरफ कुछ भी प्राप्त नहीं होता है।

यह है कि यह कैसे काम करने वाला है? मैं PostFormफ़ंक्शन से अवगत हूं, लेकिन मुझे लगता है कि मैं इसका उपयोग नहीं कर सकता, क्योंकि यह httputilसही नहीं है?

hc := http.Client{}
req, err := http.NewRequest("POST", APIURL, nil)

form := url.Values{}
form.Add("ln", c.ln)
form.Add("ip", c.ip)
form.Add("ua", c.ua)
req.PostForm = form
req.Header.Add("Content-Type", "application/x-www-form-urlencoded")

glog.Info("form was %v", form)
resp, err := hc.Do(req)

2
यहां संभावित डुप्लिकेट: stackoverflow.com/questions/19253469/…
nvcnvn

आप किसके साथ परीक्षण कर रहे हैं httputil?
जिमब

Http हैंडलर। मुझे लगता है कि यह एक तरह का e2e टेस्ट है
अरे

जवाबों:


136

आपके पास ज्यादातर सही विचार है, यह सिर्फ उस फॉर्म को भेजना है जो गलत है। फॉर्म अनुरोध के शरीर में है।

req, err := http.NewRequest("POST", url, strings.NewReader(form.Encode()))

15
ठीक है ... बस अब मैं उस पर देख रहा था ... ऐसा लगता है कि आपको स्रोत कोड को पढ़ने की आवश्यकता है न कि केवल गोडोक को पाने के लिए कि यह कैसे काम करना है।
अरे

43

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

//one-line post request/response...
response, err := http.PostForm(APIURL, url.Values{
    "ln": {c.ln},
    "ip": {c.ip},
    "ua": {c.ua}})

//okay, moving on...
if err != nil {
  //handle postform error
}

defer response.Body.Close()
body, err := ioutil.ReadAll(response.Body)

if err != nil {
  //handle read response error
}

fmt.Printf("%s\n", string(body))

https://golang.org/pkg/net/http/#pkg-overview


आप कहते हैं कि ओपी का कोड जरूरत से ज्यादा लंबा था, लेकिन आपका कोड हेडर सेट करने में सक्षम नहीं हैreq.Header.Add("Content-Type", "application/x-www-form-urlencoded")
jsnfwlr

11
Content-Typeहैडर स्वचालित रूप से करने के लिए सेट कर दिया जाता application/x-www-form-urlencodedद्वारा PostForm: के अनुसार, golang.org/pkg/net/http/#PostForm
चक Wooters

यदि आप इसमें कोई अन्य शीर्षलेख जोड़ना चाहते हैं, जैसे कि एक बुनियादी प्राधिकरण, क्या कोई रास्ता है?
1:24 बजे

@huggie नहीं, स्रोत प्रलेखन golang.org/src/net/http/client.go?s=28199:28281#L848 कहता है: "अन्य शीर्षलेख सेट करने के लिए, NewRequest और Client.Do का उपयोग करें।"
CenterOrbit
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.