2017-12-13 3 views
2

サーバーAからファイルをダウンロードするGET要求を実行し、すぐにファイルをサーバーBにPOSTしようとしています。Pythonリクエストでファイルを取得してPOSTリクエストにストリームする方法はありますか?

私はストリーミングでそれを行う方法を探していますPOST要求の入力へのGET要求の出力。

following articleでは、nodeJSでこれについて説明しています。 Python Requestsでこれをどうすればいいのですか?

+0

少しわかりますか?同時にリクエストを取得しようとしているのですが、それをPOSTリクエストにパイプしますか?私が尋ねる理由は、node.jsを参照していて、GETコンテンツを同時にPOSTリクエストにパイプできるはずだからです。 Pythonもそれを行うことができますが、それはちょっと難しいですし、それは単に '要求'以上です。 –

+0

それは可能ですが、私はそれに設定されていません。私はMartijnの答えを試してみるつもりです –

答えて

5

POSTリクエストにファイルとしてあなたは、ストリーミングGET要求から生の接続オブジェクトを渡すことができます:

r = requests.get(get_url, stream=True) 
if r.status_code == 200: 
    r.raw.decode_content = True # decompress as you read 
    files = { 
     'fieldname': ('filename', r.raw, r.headers['Content-Type']) 
    } 
    requests.post(post_url, files=files) 

response.rawファイルのようなオブジェクトを使用するには、デフォルトでは、圧縮されたデコードしません。 (GZIPまたはdeflateを使用して)応答を返すことができますが、の属性をdecode_content属性に設定すると、デコード自体を制御することができます(要求はFalseに設定されます)。

私はファイルがmultipart/form-data要求の一部としてPOSTされたと仮定しました。データを直接送信する必要がある場合は、代わりにdata=r.rawを使用してください。

+0

は魅力のように動作します。ありがとう@Martijn –

関連する問題