2008-12-08 26 views
8

मैं एक पोस्ट कॉल में एक सूची में कुछ तार भेजना चाहता हूं। उदाहरण:मैं पोस्ट क्वेरी में एक पायथन सूची कैसे पास करूं?

www.example.com/?post_data = A list of strings 

पायथन कोड डेटा को एक स्ट्रिंग (तारों की सूची के बजाय) के रूप में प्राप्त करता है। मैं इसे स्ट्रिंग्स की सूची के रूप में कैसे पोस्ट करूं?

+0

तार किसी भी तरह से सीमित हैं? – mepcotterell

+0

हाँ वे अल्पविराम से अलग हैं। (सामान्य पायथन सूचियों के रूप में) –

+0

क्या आप सर्वर (www.example.com) को परिभाषित करने के बारे में जानना चाहते हैं? या आप कुछ सर्वर के लिए क्लाइंट लिख रहे हैं जो पहले से मौजूद है? यदि आप एक ग्राहक लिख रहे हैं, तो सर्वर एपीआई दस्तावेज क्या कहता है? –

उत्तर

8

किसी URL में "स्ट्रिंग्स की सूची" जैसी कोई चीज़ नहीं है (या वास्तव में HTTP में कुछ भी - यदि आप एक ही शीर्षलेख के लिए एकाधिक मान निर्दिष्ट करते हैं, तो वे अधिकांश वेब ऐप फ्रेमवर्क IME में एक ही सीमित मान के रूप में बाहर आते हैं।)। यह सिर्फ एक स्ट्रिंग है। मेरा सुझाव है कि आप तारों को किसी तरह से सीमित करें (उदा। अल्पविराम से अलग) और फिर दूसरे छोर पर फिर से उन्हें पार्स करें।

2

यदि आप जो बड़ी स्ट्रिंग प्राप्त कर रहे हैं वह केवल सीमित है तो आप इसे विभाजित करने का प्रयास कर सकते हैं। Splitting strings देखें।

स्पष्ट करने के लिए, आप स्ट्रिंग की सीमांकित सूची प्राप्त एक अजगर सूची में उस सूची को विभाजित है, और देखा !, आप एक अजगर सूची है ...

+0

क्या होगा यदि स्ट्रिंग में अल्पविराम है? JSON या serialization का उपयोग करना सबसे अच्छा होगा imho – kender

2

आप इस बारे में बात कर रहे हैं?

post_data= ",".join(list_of_strings) 
5

JSON (जावास्क्रिप्ट ऑब्जेक्ट नोटेशन) की कोशिश करें यह पाइथन पैकेज में उपलब्ध है। यहां खोजें: http://docs.python.org/library/json.html

आप JSON में प्रतिनिधित्व की गई सरणी में अपनी सूची को एन्कोड कर सकते हैं और पोस्ट तर्क में शामिल हो सकते हैं। बाद में इसे सूची में वापस डीकोड करें ...

2

यह आने वाले तर्कों को प्रारूपित करने के लिए आपके सर्वर पर निर्भर करता है। उदाहरण के लिए , जब ज़ोप को इस तरह का अनुरोध मिलता है: http://www.zope.org?ids:list=1&ids:list=2

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

+0

चेरीपी कुछ ऐसा ही करता है: यदि यह प्राप्त होता है? x = foo और x = bar तो यह आपको x के मान के रूप में ["foo", "bar"] देगा। लेकिन जैसा कि आप कहते हैं, यह सर्वर-विशिष्ट है। –

1

एप्लिकेशन/एक्स-www-form-urlencoded एन्कोडिंग का उपयोग करके, एक POST कथन (जहां तक ​​मुझे समझा गया) को पास किया गया डेटा कुंजी-मूल्य जोड़े के रूप में एन्कोड किया गया है। तब

>>> my_string_list= { 's1': 'I',             
...  's2': 'love',               
...  's3': 'python'               
... }     

, पोस्ट करने के लिए तर्क के रूप में इसे पारित urllib के प्रलेखन पढ़ने के रूप में के रूप में मुश्किल है:

तो, मैं मान लेंगे कि आप निम्न dictionnary के रूप में स्ट्रिंग की अपनी सूची का प्रतिनिधित्व करते हैं।

>>> import urllib 
>>> print urllib.urlopen('http://www.google.fr/search', 
     urllib.urlencode(my_string_list) 
    ).read() 

ध्यान दें कि Google अपने खोज प्रश्नों के लिए POST का उपयोग नहीं करता है, लेकिन आपको Google द्वारा रिपोर्ट की गई त्रुटि दिखाई देगी।

आप WireShark चलाने जबकि इसके बाद के संस्करण कोड लिखकर हैं, तो आप पोस्ट के डेटा देखेंगे पारित किया जा रहा है:

s3=python&s2=love&s1=I 
0

django.utils.datastructures.MultiValueDict की तरह एक डेटा संरचना इस तरह के डेटा का प्रतिनिधित्व करने के लिए एक साफ रास्ता है। AFAIK यह आदेश संरक्षित करता है।

>>> d = MultiValueDict({'name': ['Adrian', 'Simon'], 'position': ['Developer']}) 
>>> d['name'] 
'Simon' 
>>> d.getlist('name') 
['Adrian', 'Simon'] 
>>> d.get('lastname', 'nonexistent') 
'nonexistent' 
>>> d.setlist('lastname', ['Holovaty', 'Willison']) 

Django django.http.QueryDict (MultiValueDict के उपवर्ग) उपयोग कर रहा है एक क्वेरी स्ट्रिंग अजगर पुरातन में और फिर से चालू करना।

from django.http import QueryDict 

qs = 'post_data=a&post_data=b&post_data=c' 

query_dict = QueryDict(qs) 

assert query_dict['post_data'] == 'c' 
assert query_dict.getlist('post_data') == ['a', 'b', 'c'] 
assert query_dict.urlencode() == qs 

आप इन कक्षाओं में कॉपी करें और उन्हें अपनी परियोजना में उपयोग करने के लिए सक्षम होना चाहिए। (मैंने सभी निर्भरताओं की जांच नहीं की है)

2

यदि आप उन्हें अल्पविराम से अलग नहीं करना चाहते हैं और आप उन्हें एक और सूची-ईश तरीके से भेजना चाहते हैं। मेरे पास संख्याओं की एक सूची है जिसे मैं पास करना चाहता हूं और मैं दूसरी तरफ एक PHP webservice का उपयोग करता हूं, मैं अपनी webservice को पुनर्निर्माण नहीं करना चाहता क्योंकि मैंने एक सामान्य बहुविकल्पीय तत्व का उपयोग किया है जो ज़ेन फ्रेमवर्क प्रदान करता है।

यह उदाहरण मेरे और मेरे छोटे पूर्णांक के लिए ठीक काम करता है और यह आपके तारों के साथ होगा, मैं वास्तव में urllib.quote (ओं) नहीं करता हूं, मैं बस एक strs करता हूं।

आयात urllib

import urllib 

आपका डंक की सूची:

string_list = ['A', 'list', 'of', 'strings', 'and', 'öthér', '.&st,u?ff,'] 

एक साथ 'post_data [] =', भी स्ट्रिंग urlencode साथ तार की सूची में शामिल हों

post_data = '&'.join('post_data[]='+urllib.quote(s) for s in string_list) 

http://example.com/

पर पोस्ट
urllib.urlopen('http://example.com/',post_data) 
+0

अपने कोड को प्रारूपित करने के लिए पढ़ें – SilentGhost

+0

क्षमा करें, पहली बार यहां, मुझे bettet मिल जाएगा। पक्का वादा! – Joelbitar

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

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