2017-08-16 10 views
1

私は2つのサーバーが1つは、他のファイルを取得しようとしている。私は単純なデータ(文字列、リスト、JSONオブジェクトなど)を前後に送るためにFlask get要求を使用しています。Python Flask:ファイルと変数を送信

私はファイルを送信する方法も知っていますが、私のデータでエラーコードを送信する必要があります。私は、次の線に沿って何か使用してい

サーバを1:

req = requests.post('https://www.otherserver.com/_download_file', data = {'filename':filename}) 

サーバー2:

@app.route('/_download_file', methods = ['POST']) 
def download_file(): 
    filename = requests.form.get('filename') 

    file_data = codecs.open(filename, 'rb').read() 
    return file_data 

サーバー1:

with codecs.open('new_file.xyz', 'w') as f: 
    f.write(req.content) 

...すべて正常に動作します。しかし、エラーコード変数をfile_dataと一緒に送って、サーバ1がステータス(HTTPステータスではなく内部ステータスコード)を知るようにします。

何か助けていただければ幸いです。

+0

HTTPエラーコードがあなたの必要を満たさない特別な理由はありますか? – wanderlust

+0

さらに重要なのは、エラーコードではなく追加のデータだけを送信することです。 – pshep123

答えて

4

私の頭に浮かべる1つの解決策は、カスタムHTTPヘッダーを使用することです。

ここでは、サーバーとクライアントの実装例を示します。

もちろん、必要に応じてカスタムヘッダーの名前と値を自由に変更することができます。

サーバー

from flask import Flask, send_from_directory 

app = Flask(__name__) 

@app.route('/', methods=['POST']) 
def index(): 
    response = send_from_directory(directory='your-directory', filename='your-file-name') 
    response.headers['my-custom-header'] = 'my-custom-status-0' 
    return response 

if __name__ == '__main__': 
    app.run(debug=True) 

クライアント

import requests 

r = requests.post(url) 

status = r.headers['my-custom-header'] 

# do what you want with status 

UPDATE

ここで実装

に基づいて、サーバーの別のバージョンがあり
import codecs 

from flask import Flask, request, make_response 

app = Flask(__name__) 

@app.route('/', methods=['POST']) 
def index(): 
    filename = request.form.get('filename') 

    file_data = codecs.open(filename, 'rb').read() 
    response = make_response() 
    response.headers['my-custom-header'] = 'my-custom-status-0' 
    response.data = file_data 
    return response 

if __name__ == '__main__': 
    app.run(debug=True) 
+0

これを私のライブコードに実装しようとしています。いずれにせよ、これは非常に有用です。それはあなたを助けてくれてよかった – pshep123

+0

ありがとう。私は答えを編集して、あなたのものに基づいて別の実装を組み込んでいます。 – ohannes

関連する問題