2010-08-26 18 views
5

का उपयोग करके, उसी नाम के साथ एकाधिक पोस्ट डेटा आइटम भेजना, मैं AppEngine में urlfetch का उपयोग कर सर्वर पर POST डेटा भेजने का प्रयास करता हूं। इनमें से कुछ पोस्ट-डेटा आइटमों का एक ही नाम है, लेकिन विभिन्न मानों के साथ।AppEngine

form_fields = { 
    "data": "foo", 
    "data": "bar" 
} 

form_data = urllib.urlencode(form_fields) 
result = urlfetch.fetch(url="http://www.foo.com/", payload=form_data, method=urlfetch.POST, headers={'Content-Type': 'application/x-www-form-urlencoded'}) 

हालांकि, इस उदाहरण में, सर्वर मूल्य bar साथ, केवल एक आइटम data नामित receieve लगता है। मैं इस समस्या को कैसे हल कर सकता हूं?

उत्तर

13

अपने form_fields शब्दकोश संशोधित करें ताकि एक ही नाम के साथ क्षेत्रों सूचियों में बदल जाता है, और urllib.urlencode करने के लिए doseq तर्क का उपयोग करें:

form_fields = { 
    "data": ["foo","bar"] 
} 

form_data = urllib.urlencode(form_fields, doseq=True) 

इस बिंदु पर, form_data'data=foo&data=bar' है, जो मुझे लगता है कि आपको चाहिए।

+0

धन्यवाद, यह सही काम करता है (अच्छा और सरल स्पष्टीकरण) – jhanifen

1

एक सामान्य पायथन dict इस प्रकार की चीज़ को संभाल नहीं सकता है; एक webob.MultiDict की तरह कुछ का उपयोग करें:

>>> z = webob.MultiDict([('foo', 'bar'), ('foo', 'baz')]) 
>>> urllib.urlencode(z) 
'foo=bar&foo=baz'