Bottle - 获取具有 unicode 字符的查询项在浏览器中有效,但在 webtest 中失败
Bottle - get query item with unicode characters works in browser, fails with webtest
我在瓶子路线中有以下代码:
site = request.query.site
这在浏览器中运行良好。所以如果我去 url:
http://myapp.domain/?site=füä
站点将等于 füa
。
尝试使用 WebTest 模拟此请求,这将导致 bottle 内出现编码错误,从而导致站点为空:
res = testapp.get("/?site=füä")
现在查看站点内将是一个空字符串:
site = request.query.site
有人知道这里发生了什么吗?
这让我很头疼,所以我发布这个是为了其他人的利益。
解决方案的关键是我将 URL 按原样从浏览器复制到我的测试代码。
res = testapp.get("/?site=füä")
浏览器(在我的例子中是 firefox 50,也是当前的 chrome)自动翻译这些字符,一切都很好。
在阅读了更多有关 bottle 如何处理 FormsDict 的信息后,我真的可以确认问题出在 WebTest 上。进行了更多搜索,我发现存在一个长期存在的错误:
quoted urls UnicodeDecodeError
为了解决这个问题,我只是将测试代码中的 URL 更改为编码 URL:
res = testapp.get("/?site=f%C3%BC%C3%A4")
还有中提琴!问题解决了。现在站点已正确设置为 füä
。我用了
HTML URL Encoding Reference.
吸取教训。切勿在测试代码中天真地使用 unicode。
我在瓶子路线中有以下代码:
site = request.query.site
这在浏览器中运行良好。所以如果我去 url:
http://myapp.domain/?site=füä
站点将等于 füa
。
尝试使用 WebTest 模拟此请求,这将导致 bottle 内出现编码错误,从而导致站点为空:
res = testapp.get("/?site=füä")
现在查看站点内将是一个空字符串:
site = request.query.site
有人知道这里发生了什么吗?
这让我很头疼,所以我发布这个是为了其他人的利益。 解决方案的关键是我将 URL 按原样从浏览器复制到我的测试代码。
res = testapp.get("/?site=füä")
浏览器(在我的例子中是 firefox 50,也是当前的 chrome)自动翻译这些字符,一切都很好。 在阅读了更多有关 bottle 如何处理 FormsDict 的信息后,我真的可以确认问题出在 WebTest 上。进行了更多搜索,我发现存在一个长期存在的错误:
quoted urls UnicodeDecodeError
为了解决这个问题,我只是将测试代码中的 URL 更改为编码 URL:
res = testapp.get("/?site=f%C3%BC%C3%A4")
还有中提琴!问题解决了。现在站点已正确设置为 füä
。我用了
HTML URL Encoding Reference.
吸取教训。切勿在测试代码中天真地使用 unicode。