2017-08-16 116 views
1

我有兩個服務器,其中一個正試圖從另一個文件中獲取文件。我正在使用Flask get請求來回發送簡單數據(字符串,列表,JSON對象等)。Python燒瓶:發送文件和變量

我也知道如何發送一個文件,但我需要發送一個錯誤代碼與我的數據。

我使用大意如下的東西:

服務器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

我想到的一個解決方案是使用自定義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