2015-08-28 7 views
5

मैं नीचे दिए गए एपीआई का पालन करने वाले पायथन अनुरोध मॉड्यूल के साथ एक HTTP डिलीट करना चाहता हूं;पाइथन अनुरोध मॉड्यूल के साथ HTTP हटाएं

https://thingspeak.com/docs/channels#create

DELETE https://api.thingspeak.com/channels/4/feeds 
     api_key=XXXXXXXXXXXXXXXX 

मैं अजगर v2.7 का उपयोग कर रहा है और मॉड्यूल अनुरोध करता है। मेरा पायथन कोड इस तरह दिखता है;

def clear(channel_id):  
    data = {} 
    data['api_key'] = 'DUCYS8xufsV613VX' 
    URL_delete = "http://api.thingspeak.com/channels/" + str(channel_id) + "/feeds" 
    r = requests.delete(URL_delete, data) 

कोड काम नहीं करता है क्योंकि request.delete() केवल एक पैरामीटर स्वीकार कर सकता है। सही कोड कैसा दिखना चाहिए?

उत्तर

4

आप

import json 
mydata = {} 
mydata['api_key'] = "Jsa9i23jka" 
r = requests.delete(URL_delete, data=json.dumps(mydata)) 

चाहते हैं तो आप नामित इनपुट, 'डेटा' का उपयोग करने के लिए है, और मेरा अनुमान है कि आप वास्तव में JSON फेंक दिया चाहते हैं कि, ताकि आप अपने शब्दकोश, 'MyData' एक में बदलने के लिए है जेसन स्ट्रिंग। आप इसके लिए json.dumps() का उपयोग कर सकते हैं।

मैं एपीआई का उपयोग कर रहे पता नहीं है, लेकिन इसके बारे में ध्वनि से आप वास्तव में उस के लिए आप की जरूरत है, URL पैरामीटर, नहीं डेटा पास करना चाहते हैं:

r = requests.delete(URL_delete, params=mydata) 

mydata dict कन्वर्ट करने के लिए कोई ज़रूरत नहीं एक जेसन स्ट्रिंग के लिए।

+0

धन्यवाद! सही जवाब होने का परीक्षण किया। दूसरी विधि काम करता है। एक बात मुझे समझ में नहीं आती है। 'R = request.delete (URL_delete, mydata) क्यों विफल रहता है लेकिन' r = request.delete (URL_delete, params = mydata) 'काम करता है? HTTP पोस्ट के लिए, मुझे पैराम का उपयोग करने की आवश्यकता नहीं है। अंतर क्यों? – user781486

+3

यदि आप https://github.com/kennethreitz/requests/blob/master/requests/api.py पर एक नज़र डालें। आप देख सकते हैं कि 'पोस्ट' को' पोस्ट (यूआरएल, डेटा = कोई नहीं ...) 'के रूप में परिभाषित किया गया है, जबकि डिलीट को' डिलीट (यूआरएल, ** क्वार्ग) 'के रूप में परिभाषित किया गया है। Kwargs का मतलब है कि यह एक 'keyed तर्क' होना है। पोस्ट काम करता है क्योंकि यह स्पष्ट रूप से कुछ तर्क सूचीबद्ध करता है। –

2

आप डेटा पैरा को @Eugene के रूप में भेज सकते हैं, लेकिन पारंपरिक रूप से अनुरोधों को हटाएं केवल यूआरएल और कुछ और नहीं है। इसका कारण यह है कि एक विश्वसनीय यूआरएल को विशिष्ट रूप से संसाधन की पहचान करनी चाहिए, जिससे हटाने के लिए अतिरिक्त पैरामीटर प्रदान करने की आवश्यकता को समाप्त किया जा सके। दूसरी ओर, यदि आपके 'APIKEY' के पास प्रमाणीकरण के साथ कुछ करना है, तो यह अनुरोध डेटा के बजाय हेडर का हिस्सा होना चाहिए, ऐसा कुछ।

headers = {'APIKEY': 'xxx'} 
response = requests.delete(url, data=json.dumps(payload), headers=headers) 
संबंधित मुद्दे