2016-06-23 27 views
6

APIにトークンベースの認証を使用するRails 4アプリケーションがあり、Python 3スクリプトでレコードを更新できる必要があります。リクエストを使用してヘッダー付きのPATCHリクエストを送信する方法

私の現在のスクリプトは、私はAPIの認証を無効にする場合は、[OK働くこの

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は、ドキュメントに従って2つのパラメータしか取りません。

私は、次のヘッダー情報が

'Authorization:Token token="xxxxxxxxxxxxxxxxxxxxxx"' 

を追加しましたでしょうヘッダのこのタイプはカールでOK働くポイントを取得する必要があります。どうすればPython 3でリクエストできますか?

+0

あなたが実際* 'ヘッダ='を追加し*てみましたか?何が起こった? – jonrsharpe

+0

私は 'headers = {'Authorization': 'Token'、 'token': 'xxxxxx'}' のようなものに疲れましたが、 'r = requests.patch(url、payload、headers = headers)' Pythonでは、WebRick on Rails側からの反応はありません。何が起こっているのかを知るためにログを再生しようとしています。 –

答えて

5

patchはちょうど= {your_header}ヘッダを渡し、kwargsからをとります。

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

こんにちは。私は 'headers = {'Authorization': 'Token'、 'token': 'xxxxxx'}'と 'r = requests.patch(url、payload、headers = headers)'を試しましたが、Railsはこれを好まないようです。認証に失敗しました。どのようにPythonが実際に送信しているのか、ヘッダを調べる方法を知ることができます。私は 'print(r.headers)'を結んでいますが、これはヘッダとして渡された情報は含まれていません。 –

+0

@BartCこれはヘッダーの形式ではないことに注意してください。最後のコードスニペットを再読み込みしてください。 – jonrsharpe

+1

@PadraicCunningham非常に感謝!!!!、それは偉大な、細部を逃した/ちょうどそれを動作させるために私の他の試みの多くの中で犯人だったそれを得ることはありませんでした。再度、感謝します。 –

関連する問題