utf-8でエンコードされた認証文字列を正しくデコードするようにcherrypyを設定する方法はありますか?
CherryPyはISO-8859-1でBasic Authをデコードします
更新
それはissue #1680に記載の制限を知っているのです。
問題が解決するまで、CherryPyはUTF-8でエンコードされた基本認証データを認識しません。
元の問題
私はウムラウト文字を使用して名前/パスワードで基本認証を使用して問題があります。 http-clientにISO-8859-1(cherrypyは理解しにくい)という名前:passwordを発行するか、またはcherrypyがutf-8を使って認証文字列をデコードするように設定する方法はないようです。 Pythonの3.6とCherryPyは13.1.0を使用して
:
[28/Dec/2017:15:52:57] ENGINE Bus STARTING
[28/Dec/2017:15:52:57] ENGINE Serving on http://127.0.0.1:8080
[28/Dec/2017:15:52:57] ENGINE Bus STARTED
realm: 'MY_REALM', username: 'Céline', password: 'motörhead'
127.0.0.1 - C\xc3\x83\xc2\xa9line [28/Dec/2017:15:53:18] "GET/HTTP/1.1" 200 52 "" "Mozilla/5.0 (Windows; U; MSIE 9.0; WIndows NT 9.0; en-US))"
:CherryPyにコンソールから次のような出力が得られます
curl -u 'Céline:motörhead' -i -X GET http://127.0.0.1:8080/
:次の引数を持つカール呼び出し
import cherrypy
class SimpleWebpage(object):
@cherrypy.expose
def index(self):
return "<html><head></head><body>Authenticated</body></html>"
def dummy_validate(realm, username, password):
print("realm: {realm!r}, username: {username!r}, password: {password!r}".format_map(locals()))
return True
cherrypy.tree.mount(SimpleWebpage(), '/',
{'/': {'tools.auth_basic.checkpassword': dummy_validate,
'tools.auth_basic.on': True,
'tools.auth_basic.realm': 'MY_REALM',}})
cherrypy.config.update({'tools.sessions.on': True,})
cherrypy.engine.autoreload.unsubscribe()
cherrypy.engine.start()
cherrypy.engine.block()
cygwin上のcurl 7.56.1(i686-pc-cygwin)とredhat6上のcurl 7.19.7(x86_64-redhat-linux-gnu)でテスト済み。私はgoogle-chrome 63.0.3239.108と同じ結果を試しました。このコードの意志を使用して
Kludge
def decode_utf8(s):
s_bytes = bytes([ord(c) for c in s])
return s_bytes.decode('utf-8')
def dummy_validate(realm, username, password):
username = decode_utf8(username)
password = decode_utf8(password)
print("realm: {realm!r}, username: {username!r}, password: {password!r}".format_map(locals()))
return True
私のグーグル・クロムやカールで正しい結果が得られます。しかし、ISO-8851-15でエンコードされた文字列を送信するWindowsのFirefox 57.0.2(32ビット)では(例として)動作しません。
また、これはcherrypy.request.login
値を修正しません。
こんにちは、githubリポジトリに問題を提出して、フレームワーク自体でソートできるようにしてください。コードベースには、Unicodeにはあまり面倒なことがたくさんありましたが、時間の経過とともに修正されましたが、改善の余地はまだあります。 https://github.com/cherrypy/cherrypy/issues/new – webKnjaZ
@webKnjaZさて、私はそれをしています。すぐに問題をリンクします。バグは、stackoverflowで** offtopicではないようです。 – MadMike
あなたは正しいです。ここでは不可解ですが、修復プロセスに影響を与える可能性があるため、それでもなおustreamで追跡する必要があります。 – webKnjaZ