Подтвердить что ты не робот

Flask и Werkzeug: проверка почтового запроса с пользовательскими заголовками

В настоящее время я тестирую свое приложение с предложениями http://flask.pocoo.org/docs/testing/, но я хотел бы добавить заголовок к сообщению.

Мой запрос в настоящее время:

self.app.post('/v0/scenes/test/foo', data=dict(image=(StringIO('fake image'), 'image.png')))

но я хотел бы добавить контент-md5 в запрос. Возможно ли это?

Мои исследования:

Клиент фляжки (в фляге /testing.py) расширяет клиент Werkzeug, задокументированный здесь: http://werkzeug.pocoo.org/docs/test/

Как вы можете видеть, post использует open. Но open имеет только:

Parameters: 
 as_tuple – Returns a tuple in the form (environ, result)
 buffered – Set this to True to buffer the application run. This will automatically close the application for you as well.
 follow_redirects – Set this to True if the Client should follow HTTP redirects.

Итак, похоже, что он не поддерживается. Как я могу заставить работать такую ​​функцию?

4b9b3361

Ответ 1

open также принимают *args и **kwargs, которые используются как аргументы EnvironBuilder. Таким образом, вы можете добавить только аргумент headers к вашему первому запросу:

with self.app.test_client() as client:
    client.post('/v0/scenes/test/foo',
                data=dict(image=(StringIO('fake image'), 'image.png')),
                headers={'content-md5': 'some hash'});

Ответ 2

Веркжег на помощь!

from werkzeug.test import EnvironBuilder, run_wsgi_app
from werkzeug.wrappers import Request

builder = EnvironBuilder(path='/v0/scenes/bucket/foo', method='POST', data={'image': (StringIO('fake image'), 'image.png')}, \
    headers={'content-md5': 'some hash'})
env = builder.get_environ()

(app_iter, status, headers) = run_wsgi_app(http.app.wsgi_app, env)
status = int(status[:3]) # output will be something like 500 INTERNAL SERVER ERROR