はまり

pythonでwebDAVを使ってファイル転送するスクリプトを書いて、FC6で動かすと問題無いのに、RHEL4で動かすとファイルの先頭に0x0a0x0dが付加されて、最後から1バイト欠落するという問題で軽くはまり。

原因はRHEL4に付属のpython-2.3.4-14.3、FC6に付属のpython-2.4.4-1.fc6に同梱される、
base64.pyのメソッド、base64.encodestring()は0x0aを最後に付加してreturnする、ということ。

で、mod_dav側ではHTTPレスポンスヘッダとボディの間に、
(HEAD) 0x0a0x0d 0x0a0x0d (BODY)
という本来のデリミタではなく、
(HEAD 0x0a ) 0x0a0x0d 0x0a0x0d (BODY)
というバイト列が渡されるため、
(HEAD?) 0x0a 0x0a0x0d (0x0a0x0d BODY?)
と認識するに至る模様。

テスト段階では、FC6のbase64.b64encode()を利用していたため、この問題の発見が出来なかったわけ。
#base64って言いながら、unreadableなstringを返却する、base64.encodestring()には問題があるような気が…

対処方法は、base64.encodestring().strip()とするだけ。

タイトルとURLをコピーしました