5

Python で安らかな Web サービスへのクライアント インターフェイスをプログラミングしていますが、残念ながら Web サービスでは、要求にカスタム ヘッダーが存在する必要があります。これにはリクエストを使用していますが、Web サービスでは、ヘッダーがリクエスト内で特定の順序になっている必要もあります。Requests がヘッダーをどのように順序付けているかを理解できず、この順序付けを制御できる方法があるかどうかを確認できませんでした。

また、誰かが推奨事項を持っている場合は、アプリケーションでリクエスト以外の別のモジュールを使用することにもオープンです。

4

2 に答える 2

4

更新された回答

以下の回答は、2.9.2 より前のバージョンに関するものです。バージョン 2.9.2 (2016 年 4 月頃) 以降、 を使用するOrderedDict と再び動作します。

古い答え

組み込み機能だけを使用して、少し前に可能だったようです ( issue 179 )。もうないと思います (問題 2057 )。その理由の 1 つはnum1による別のコメントで言及されています。次の解決策/回避策を使用しました。

import requests
import collections

class SortedHTTPAdapter(requests.adapters.HTTPAdapter):
    def add_headers(self, request, **kwargs):
        request.headers = collections.OrderedDict(
            ((key, value) for key, value in sorted(request.headers.items()))
        )

session = requests.Session()
session.mount("http://", SortedHTTPAdapter())

この例では、ヘッダーは単に並べ替えられていますが、任意の方法で並べ替えることができます。requestsコードを調べてメソッドのドキュメント文字列を読んだ後、そのメソッドを選択しました。

接続に必要なヘッダーを追加します。v2.0 の時点では、これはデフォルトでは何もしませんが、 HTTPAdapter <requests.adapters.HTTPAdapter>クラスをサブクラス化するユーザーによるオーバーライドのために残されています。

send絶対的な制御のために、おそらくメソッドをオーバーライドできます。

于 2015-04-06T16:09:09.743 に答える