2013-06-03 12 views
13
func login(rw http.ResponseWriter, req *http.Request) { 
    req.ParseForm() 

    if req.Method == "GET" { 
     fmt.Fprintf(rw, "Error Method") 
    } else { 
     name := strings.TrimSpace(req.FormValue("userid")) 
     fmt.Println("userid:", name) 
     fmt.Println("pwd:", req.FormValue("pwd")) 
     fmt.Fprintf(rw, "welcome back,%s", req.FormValue("userid")) 
    } 
} 

और मैं ASIhttprequst का उपयोग करके इस तरह से भेज सकता हूं।गोलांग http सर्वर, पोस्ट मूल्य

[self setRequest:[ASIFormDataRequest requestWithURL:[NSURL URLWithString:@"http://127.0.0.1:8080/login"]]]; 
[request setPostValue:@"userid" forKey:@"[email protected]"]; 
[request setPostValue:@"pwd" forKey:@"fdsfdsfdkskfjhds"]; 
[request setRequestMethod:@"POST"]; 

मैं req.FormValue के साथ एक शून्य मान मिल गया ("उपयोगकर्ता id")

क्या happend? और इसे कैसे ठीक करें?

+0

सिर्फ एक शॉट काम करता है यह काम करेंगे - शायद तुम सिर्फ PostValue और PostKey मिश्रित? –

+0

HTTP अनुरोध – thwd

उत्तर

3

क्या आपने पहले से ही इसे के साथ req.FormValue के साथ परीक्षण किया था?

+1

हां डंप करें, मैं फॉर्मवैल्यू के बजाय PostFormValue आज़माता हूं, लेकिन परिणाम अभी भी वही है। – user1751912

+1

क्या आपने इसे 'req.ParseForm()' के बजाय 'req.ParseMultipartForm()' के साथ भी परीक्षण किया था? – Neo

10

इस बारे में कैसे?

req.ParseForm() 
req.Form.Get(key) 
+2

हां, लेकिन आपको पहले 'req.ParseForm() 'के साथ होना चाहिए। –

+0

पता नहीं क्यों आपका उत्तर स्वीकार नहीं किया गया था। सीधे और बिंदु – Mauricio

0

मैं ParseForm से पहले ParseMultipartForm बुला के साथ समाधान मिल गया है, यह मेरे लिए काम करता है।

0

यदि आप मल्टीपार्ट/फॉर्म-डेटा POST अनुरोध करते हैं, तो ParseForm अनुरोध निकाय को सही तरीके से पार्स नहीं करता है (यह एक बग हो सकता है)। तो, यदि मामला है तो ParseMultipartForm का उपयोग करें।

या आप इन पार्स विधियों को कॉल किए बिना सीधे फॉर्मवैल्यू या पोस्टफॉर्मवेल्यू को कॉल कर सकते हैं।

0

मुझे पारसेफॉर्म का उपयोग करके समान समस्याएं थीं। मैंने ऐसा कुछ करने का अंत किया:

type UserRequest struct { 
    UserId string `json:"userid"` 
    Pwd  string `json:"pwd"` 
} 

func login(w http.ResponseWriter, r *http.Request) { 
    var ur UserRequest 
    decode := json.NewDecoder(r.Body) 
    decoder.Decode(&ur) 

    // Access data via struct 
} 

आशा है कि मदद करता है!

0

किसी पोस्ट अनुरोध से मूल्य निकालने के लिए आपको पहले r.ParseForm() पर कॉल करना होगा। This यूआरएल से कच्चे प्रश्न का विश्लेषण करता है और आर.फॉर्म अपडेट करता है।

पोस्ट या डाल अनुरोधों के लिए, यह भी एक रूप के रूप में अनुरोध शरीर को पार्स करता है और दोनों r.PostForm और r.Form में परिणाम डाल दिया। POST और PUT body पैरामीटर r.Form में URL क्वेरी स्ट्रिंग मानों पर प्राथमिकता लेते हैं।

अब आपके r.From आपके ग्राहक द्वारा प्रदान किए गए सभी मूल्यों का मानचित्र है। एक विशेष मूल्य निकालने के लिए आप r.FormValue("<your param name>") या r.Form.Get("<your param name>") का उपयोग कर सकते हैं।

तो बुनियादी तौर पर आप इस होगा:

r.ParseForm() 
res := r.FormValue("<your param name>") 
-1

इस साथी का प्रयास करें।

आशा के रूप में यह मेरे लिए अंधेरे में

r.FormValue("userid") 
0
// Form contains the parsed form data, including both the URL 
    // field's query parameters and the POST or PUT form data. 
    // **This field is only available after ParseForm is called.** 
    // The HTTP client ignores Form and uses Body instead. 
    Form url.Values 

    // PostForm contains the parsed form data from POST, PATCH, 
    // or PUT body parameters. 
    // 
    // **This field is only available after ParseForm is called.** 
    // The HTTP client ignores PostForm and uses Body instead. 
    PostForm url.Values 
+0

यह फ़ील्ड केवल ParseForm के नाम के बाद उपलब्ध है। – Hao

संबंधित मुद्दे