open
、seek
、read
、tell
は、引数に応じてファイルの一部のみを読み込む関数を定義しています。pythonリクエストでcontent-lengthを計算させ、指定されたものを使用させるにはどうすればいいですか?
しかし、このロジックは、デフォルトtell
とPython requests
はその後、私たちのカスタムtell
機能にリダイレクトし、ロジックがどこかにバグがあると、間違った値を返すtell()
を使用することを含むコンテンツ長を計算しようとしているよりも優先されます。そして私はいくつかの変更を試みました、それはエラーをスローします。
はリクエストのmodels.pyから、次の発見:私は把握することはできませんよ、今の
def prepare_content_length(self, body):
if hasattr(body, 'seek') and hasattr(body, 'tell'):
body.seek(0, 2)
self.headers['Content-Length'] = builtin_str(body.tell())
body.seek(0, 0)
elif body is not None:
l = super_len(body)
if l:
self.headers['Content-Length'] = builtin_str(l)
elif (self.method not in ('GET', 'HEAD')) and (self.headers.get('Content-Length') is None):
self.headers['Content-Length'] = '0'
どこバグだとより多くを調査し、それを修正するために出て強調しました。そして、他のすべては、Pythonリクエストによるコンテンツ長の計算を除いて動作します。
私はコンテンツ長を見つけるための独自の定義を作成しました。そして私はリクエストヘッダーに値を含めました。しかし、要求はまだコンテンツ長さと投げエラーを準備しています。
content-lengthを準備しないように制限し、指定されたcontent-lengthを使用するにはどうすればよいですか?
さて、あなたは標準の関数とメソッドを変更しています。どのように物事が正しく働くことを期待できますか? –
@AndreaCorbelliniこんにちは、はい、あなたは正しいです。しかし、これはファイルを複数の部分に分割してアップロードするために必要です。まあ、それはずっとずっとそこにいました。そして、最近、urllib2からリクエストに切り替えました。だから今このエラーに遭遇しました。 –