許可ヘッダをドロップPythonのPOSTリクエスト

user4184113:

私は、Pythonライブラリを要求を使用してAPI POSTリクエストを作成しようとしています。私は通過していAuthorizationヘッダーが、私は、デバッグしようとしたとき、私は、ヘッダーが削除されていることを見ることができます。私は何が起こっているか見当がつかない。

ここに私のコードは次のとおりです。

def make_post_request():

    access_token = get_access_token()
    bearer_token = base64.b64encode(bytes("'Bearer {}'".format(access_token)), 'utf-8')
    print bearer_token

    headers = {'Content-Type': 'application/json', 'Authorization': bearer_token}

    data = '{"FirstName" : "Jane", "LastName" : "Smith"}'

    response = requests.post('https://myserver.com/endpoint', headers=headers, data=data)

    print response.request.headers

    print response.text

結果print response.request.headersです。 {'Connection': 'keep-alive', 'Content-Type': 'application/json', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'User-Agent': 'python-requests/2.4.3 CPython/2.7.9 Linux/4.1.19-v7+'}

Authorizationヘッダは、要求ヘッダーに存在しないと仮定驚くべきことではない - と要求「は無効なセッションIDを」というエラーメッセージと共に失敗します。

本当に私が気づいた混乱何かが、私はPOSTリクエストをGETリクエストであることを変更した場合、それは通過ヘッダを渡すということでした!

なぜこのライブラリは、POSTリクエストのヘッダを落とすことになるとどのように私は仕事にこれを得るのですか?

libのリクエストやPythonのv2.4.3を使用して2.7.9

Kmork:

リクエスト2.4.3では、唯一の場所reqeuests削除Authorization要求が別のホストにリダイレクトされるときにヘッダがあります。これは、関連するコードです

if 'Authorization' in headers:
    # If we get redirected to a new host, we should strip out any
    # authentication headers.
    original_parsed = urlparse(response.request.url)
    redirect_parsed = urlparse(url)

    if (original_parsed.hostname != redirect_parsed.hostname):
        del headers['Authorization']

新しいバージョンではrequestsAuthorizationヘッダは、(例えば、リダイレクトがセキュアから非セキュアプロトコルである場合)、追加の場合には削除されます。

おそらくあなたの場合に何が起こるか、あなたのポストの要求が別のホストにリダイレクトされますということです。あなたが認証を保持したい場合は、要求はあなただけ使用してそれを行うことを可能にするnetrcファイルを。残念ながらそれはあなたがあなたの認証方法ではないように思われるHTTP基本認証を使用できるようになります。その場合には、最善の解決策は、サブクラスに思われるrequests.Sessionので、同じように、この動作をオーバーライドします。

from requests import Session

class NoRebuildAuthSession(Session):
    def rebuild_auth(self, prepared_request, response):
        """
        No code here means requests will always preserve your authorization when redirected.
        Be careful not to leak your credentials to untrusted hosts!
        """

session = NoRebuildAuthSession()
response = session.post('https://myserver.com/endpoint', headers=headers, data=data)

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=20018&siteId=1