2016-06-23 20 views
6

के साथ पैच अनुरोध भेजने के अनुरोधों का उपयोग कैसे करें मेरे पास एक रेल 4 एप्लिकेशन है जो एपीआई के लिए टोकन आधारित प्रमाणीकरण का उपयोग करता है और पाइथन 3 स्क्रिप्ट के माध्यम से रिकॉर्ड अपडेट करने में सक्षम होना चाहिए।हेडर

मेरे वर्तमान स्क्रिप्ट इस

import requests 
import json 

url = 'http://0.0.0.0:3000/api/v1/update_experiment.json' 
payload = {'expt_name' : 'A60E001', 'status' : 'done' } 

r = requests.patch(url, payload) 

जो ठीक काम करता है अगर मैं एपीआई प्रमाणीकरण को अक्षम तरह दिखता है।

मैं यह नहीं समझ सकता कि इसमें हेडर जोड़ने के लिए, requests.patch केवल दस्तावेज़ों के अनुसार दो पैरामीटर लेता है।

मैं कहाँ निम्नलिखित हैडर जानकारी

'Authorization:Token token="xxxxxxxxxxxxxxxxxxxxxx"' 

हैडर के इस प्रकार के कर्ल में ठीक काम करता है जोड़ा जाएगा बात करने के लिए प्राप्त करने की आवश्यकता होगी। मैं इसे पायथन 3 और अनुरोधों में कैसे कर सकता हूं?

+0

आप वास्तव में क्या * कोशिश * जोड़ने 'हेडर ='? क्या हुआ? – jonrsharpe

+0

मैंने 'हेडर = {' प्रमाणीकरण 'जैसे कुछ थक गया:' टोकन ',' टोकन ':' xxxxxx '} ' फिर' r = request.patch (url, payload, headers = headers)' लेकिन कुछ भी नहीं होता, कोई त्रुटि नहीं पायथन में, रेल तरफ वेबरिक से कोई प्रतिक्रिया नहीं। यह देखने के लिए लॉग के साथ खेलने का प्रयास कर रहा है कि यह क्या चल रहा है। –

उत्तर

5

patch kwargs लेता है, सिर्फ हेडर = {} your_header पारित: की तरह

def patch(url, data=None, **kwargs): 
    """Sends a PATCH request. 

    :param url: URL for the new :class:`Request` object. 
    :param data: (optional) Dictionary, bytes, or file-like object to send in the body of the :class:`Request`. 
    :param \*\*kwargs: Optional arguments that ``request`` takes. 
    :return: :class:`Response <Response>` object 
    :rtype: requests.Response 
    """ 

    return request('patch', url, data=data, **kwargs) 

Sosomething:

head = {"Authorization":"Token token=xxxxxxxxxxxxxxxxxxxxxx"} 
url = 'http://0.0.0.0:3000/api/v1/update_experiment.json' 
payload = {'expt_name' : 'A60E001', 'status' : 'done' } 

r = requests.patch(url, payload, headers=head) 
+0

हाय। मैंने 'हेडर = {' प्रमाणीकरण 'की कोशिश की:' टोकन ',' टोकन ':' xxxxxx '}' फिर 'आर = request.patch (यूआरएल, पेलोड, हेडर = हेडर)' लेकिन रेल इसे पसंद नहीं करते हैं। प्रमाणीकरण विफल रहता है। मैं कैसे देख सकता हूं कि पाइथन वास्तव में क्या भेज रहा है, हेडर का निरीक्षण कैसे करें। मैंने 'प्रिंट (आरहेडर)' बांध लिया है, लेकिन इसमें हेडर के रूप में पास की गई कोई भी जानकारी शामिल नहीं है। –

+0

@ बार्टसी नोट करें कि यह हेडर का काफी प्रारूप नहीं है - अंतिम कोड स्निपेट को दोबारा पढ़ें। – jonrsharpe

+1

@ पैड्राइक कनिंघम बहुत धन्यवाद !!!!, यह बहुत अच्छा काम करता है, उस विवरण को याद किया/बस इसे प्राप्त नहीं किया जो कि इसे बनाने के लिए मेरे कई अन्य प्रयासों में अपराधी था। एक बार फिर धन्यवाद। –