2016-11-27 10 views
0

У меня есть следующий код маршрут бутылки:бутылки - получить элемент запроса с Юникодом работает в браузере, не может с WebTest

site = request.query.site 

Это отлично работает в браузере. Так что, если я иду в URL:

http://myapp.domain/?site=füä 

сайт будет равняться, füa.

Попытки имитировать этот запрос с WebTest это приведет к ошибке кодирования внутри бутылки, которая затем приводит сайт порожняком:

res = testapp.get("/?site=füä") 

Теперь внутри сайта вида будет пустая строка:

site = request.query.site 

Кто-нибудь знает, что здесь происходит?

+0

Это питон 2 или 3? – tdelaney

+0

Это Python3, но я решил проблему уже. Благодаря! – Oz123

ответ

3

Это вызвало у меня болит голова, поэтому я отправляю это на благо других. Ключом к решению, был тот факт, что я совпадал с URL-адресом, указанным в браузере, до моего тестового кода.

res = testapp.get("/?site=füä") 

Браузер (в моем случае Firefox 50, а также текущий хром) молча перевести эти символы, и все прекрасно. Прочитав больше о том, как бутылка обрабатывает FormsDict, я действительно могу подтвердить, что проблема связана с WebTest. Немного больше поиска, и я узнал, что там долго стоять ошибка относительно, что:

quoted urls UnicodeDecodeError

Чтобы обойти эту проблему, я просто изменить URL в тестовом коде в закодированном URL:

res = testapp.get("/?site=f%C3%BC%C3%A4") 

И альт! Проблема решена. Теперь сайт правильно настроен на füä. Я использовал HTML URL Encoding Reference.

Извлеченный урок. Никогда пользователь unicode наивно в тестовом коде.