Ho letto diverse domande correlate qui su SO ma non sono riuscito a trovare una soluzione funzionante.python-richieste post con nomi di file unicode
Ho un server Fiasca con questo codice semplificato:
app = Flask(__name__)
api = Api(app)
class SendMailAPI(Resource):
def post(self):
print request.files
return Response(status=200)
api.add_resource(SendMailAPI, '/')
if __name__ == '__main__':
app.run(host='0.0.0.0', debug=True)
Poi nel client:
# coding:utf-8
import requests
eng_file_name = 'a.txt'
heb_file_name = u'א.txt'
requests.post('http://localhost:5000/', files={'file0': open(eng_file_name, 'rb')})
requests.post('http://localhost:5000/', files={'file0': open(heb_file_name, 'rb')})
Quando si invia la prima richiesta con il nome del file non UTF-8 Il server riceve la richiesta con il file e stampa ImmutableMultiDict([('file0', <FileStorage: u'a.txt' (None)>)])
, ma quando si invia il file con il nome file utf-8 il server non sembra ricevere il file mentre stampa ImmutableMultiDict([])
.
sto usando richieste 2.3.0
ma il problema non si risolve con l'ultima versione, come pure (2.8.1
), versione Flask è 0.10.1
e la versione Flask-RESTful è 0.3.4
.
Ho fatto un po 'di scavo nel codice requests
e la richiesta sembra essere inviata ok (cioè con il file), e ho stampato la richiesta appena prima di essere inviata e vedere il nome del file è stato effettivamente codificato in RFC2231:
--6ea257530b254861b71626f10a801726
Content-Disposition: form-data; name="file0"; filename*=utf-8''%D7%90.txt
in sintesi le cose, non sono del tutto sicuro se il problema si trova all'interno requests
che non allegare correttamente il file per la richiesta o se Flask
sta avendo problemi con la raccolta di file con i nomi di file che sono codificato secondo RFC2231.
UPDATE: sono imbattuto in questo problema in requests
GitHub: https://github.com/kennethreitz/requests/issues/2505
Poiché la richiesta è corretta, questo deve essere il server. La domanda sembra un'attività di debug run-of-the-mill per me. Aggiungi qualche punto di interruzione/debug di stampa qua e là per definire con precisione la specifica riga di codice che sbaglia. –
quindi richieste codifica i nomi dei file in un modo che la beuta non supporta? – mehdy