私は現在Python 2.7リクエストライブラリを使用していますが、順序付けられたヘッダはサポートされていません。私はポストのために順序づけられたデータを置くことができ、(順序付けられた辞書のように)得ることができますが、単にヘッダーのためのサポートがありません。私はHTTPプロトコルRFCを知っていますが、ヘッダーの順序は重要ではないことを示していますが、問題は、ヘッダが整っていなければ、私が実装しているサードパーティのサービスが動作しないということです。私はこれを知っています。私は他の言語で注文されたヘッダリクエストを実装しています。それはJavaのように動作しますし、はい、私はそれを100%確信しています。なぜなら、これがリクエスト間の唯一の違いであることを確認するためです。 。しかし、私は既にPythonで5,000以上の行を持っていますので、このような問題のためにこのような痛みを伴う決定があります。Python - Ordersed Headers HTTPリクエスト
私が考えている唯一の解決策は、TCPの上にhttpプロトコルを実装することですが、これは賢明な解決策ではありません。私は利用可能なソリューションと同じ品質のコードを持つことはできませんし、私のコードでは失敗の可能性があります。
は、私は以下の持っている単純化されたコード例を参照してください。data=(("param1","something"),
("param2","something_else"))
headers={'id': 'some_random_number',
'version':'some_random_number' ,
'signature':'some_random_number' ,
'Content-Type':'application/x-www-form-urlencoded' ,
'charset':'utf-8' ,
'Content-Length':str(len(urllib.urlencode(data))) ,
'name':'random' ,
'User-Agent':'Firefox' ,
'Connection':'Keep-Alive' ,
'Accept-Encoding':'gzip'}
requests.post("myservice.com",headers=headers, data=data)
(全体で私のポイントを得るために、実際のないようにするためだけの例を)そのよう
'version':'some_random_number'
'Accept-Encoding':'gzip'
'id': 'some_random_number'
'User-Agent':'Firefox'
'signature':'some_random_number'
'Connection':'Keep-Alive'
'Content-Type':'application/x-www-form-urlencoded'
'charset':'utf-8'
'name':'random'
を送信されたリクエストヘッダの順序
これは私には問題です。私はこの時点で何をすべきか分かりません。どんな助けでも大歓迎です。
ここclass OrderedHeaders(object):
def __init__(self, *headers):
self.headers = headers
def items(self):
return iter(self.headers)
oh = OrderedHeaders(('Accept-Charset', 'Foo'), ('Bar', 'Foobar'))
for k, v in oh.items():
print("%s:%s" % (k, v))
がどのヘッダを決定するためにtopological sortingを使用して、より詳細な例である:私はここrequests
はと幸せかもしれない非常に、非常に単純なOrderedHeaders
ことで、コメントを拡張し、ライブラリurllibはノーサポート
dictを注文しますか? –
いいえ、ordered dictを使用すると、要求ライブラリはitems()メソッドを使用してヘッダーを解析し、ordered dictのサポートはないため、要求ライブラリに対して.items()例外が発生します。それは私が別のstackoverflowの質問で読んだものからいくつかの非常に古い要求のバージョンで動作するために使用されていました。 –
返されるヘッダの順序を制御するカスタム '.items()'を持つカスタムのdict-likeオブジェクトを 'requests'に渡すことはできますか? '要求'がその順序を保つなら、あなたは良い考えである – user2722968