2006年02月16日 21:10 [Edit]
patch - XMLRPC::Lite for UTF-8 string
というわけで、patchを送っときました。
404 Blog Not Found:はてなキーワード連想語API vs. XMLRPC::Liteそうなのです。XMLRPC::Liteは、Non-ASCIIな文字列はbase64でおくっておったのですね。
はてなブックマーク - torumのブックマーク/ 2006年02月16日
XML-RPCでNon-ASCIIな文字列をBase64エンコーディングしない、と仕様自体が改善されてからもう結構たったから、これはXMLRPC::Liteのバグかと...。
それで以下を見ると、確かにそうなってます。
XML-RPC SpecificationUpdated 6/30/03 DW Removed "ASCII" from definition of string.
とはいえ、こういうプロトコルの仕様変更の場合には、実装側でも新旧両方に対処しといた方がいいので、はてなにおかれてはBase64された場合の対処もお願いしつつ、Module側でも新旧両方に対処してもらうというのが筋。もちろんModule User側で
XMLRPC::Lite (SOAP::Lite) で base64 エンコーディングさせない: blog.bulknews.net
my $res = XMLRPC::Lite->new->proxy('http://d.hatena.ne.jp/xmlrpc')
->call('hatena.getSimilarWord',
{ wordlist => [ XMLRPC::Data->type(string => "はてな") ] }
);
とするのも一向だけど、あまりバッドノウハウは貯めたくないし、というわけで、とりあえず以下のpatchを作者に送付しておきました。
use XMLRPC::Lite -nobase64;
とするか、$XMLRPC::Serializer::USE_BASE64 = 0;とするかすると、base64 encodingを行わなくなります。
Dan the CPAN Committer
diff -ruN SOAP-Lite-0.60/lib/XMLRPC/Lite.pm SOAP-Lite-0.60-dan/lib/XMLRPC/Lite.pm
--- SOAP-Lite-0.60/lib/XMLRPC/Lite.pm 2006-02-16 20:38:46.000000000 +0900
+++ SOAP-Lite-0.60-dan/lib/XMLRPC/Lite.pm 2003-08-19 03:44:29.000000000 +0900
@@ -15,14 +15,6 @@
use vars qw($VERSION);
$VERSION = sprintf("%d.%s", map {s/_//g; $_} q$Name: release-0_60-public $ =~ /-(\d+)_([\d_]+)/);
-sub import{
- my $class = shift;
- my %arg = map { $_ => 1 } @_;
- if (exists $arg{-utf8string} || exists $arg{-nobase64}){
- $XMLRPC::Serializer::USE_BASE64 = 0;
- }
-}
-
# ======================================================================
package XMLRPC::Constants;
@@ -53,25 +45,19 @@
@XMLRPC::Serializer::ISA = qw(SOAP::Serializer);
-our $USE_BASE64 = 1;
-
sub new {
my $self = shift;
+
unless (ref $self) {
my $class = ref($self) || $self;
- my %typelookup =
- (
- int => [20, sub {$_[0] =~ /^[+-]?\d+$/}, 'as_int'],
- double => [30, sub {$_[0] =~ /^(-?(?:\d+(?:\.\d*)?|\.\d+)|([+-]?)(?=\d|\.\d)\d*(\.\d*)?([Ee]([+-]?\d+))?)$/}, 'as_double'],
- dateTime => [35, sub {$_[0] =~ /^\d{8}T\d\d:\d\d:\d\d$/}, 'as_dateTime'],
- string => [40, sub {1}, 'as_string'],
- );
- if ($USE_BASE64){
- $typelookup{base64} =
- [10, sub {$_[0] =~ /[^\x09\x0a\x0d\x20-\x7f]/}, 'as_base64'];
- };
$self = $class->SUPER::new(
- typelookup => \%typelookup,
+ typelookup => {
+ base64 => [10, sub {$_[0] =~ /[^\x09\x0a\x0d\x20-\x7f]/}, 'as_base64'],
+ int => [20, sub {$_[0] =~ /^[+-]?\d+$/}, 'as_int'],
+ double => [30, sub {$_[0] =~ /^(-?(?:\d+(?:\.\d*)?|\.\d+)|([+-]?)(?=\d|\.\d)\d*(\.\d*)?([Ee]([+-]?\d+))?)$/}, 'as_double'],
+ dateTime => [35, sub {$_[0] =~ /^\d{8}T\d\d:\d\d:\d\d$/}, 'as_dateTime'],
+ string => [40, sub {1}, 'as_string'],
+ },
attr => {},
namespaces => {},
@_,
Posted by dankogai at 21:10│Comments(0)│TrackBack(2)
この記事へのトラックバックURL
この記事へのトラックバック
Net::Movabletypeでの投稿時に"MT [fatal] Wide c...
XMLRPC::Lite でUTF-8(メモ)【寝不足にて候(仮)】at 2007年02月22日 02:19
Net::Movabletypeでの投稿時に"MT [fatal] Wide c...
XMLRPC::Lite でUTF-8(メモ)【寝不足にて候(仮)】at 2009年03月25日 00:57