2009-06-23

XMLRPC::Client.new2 is IPv4 only!

稍微测试了一下,用Python写一个IPv6的XML-RPC客户端比较简单:
import xmlrpclib

server = xmlrpclib.ServerProxy('http://[::1]:4444/usermgmt')
print server.list_users({'namespace' : 0})

如上,如果是loopback,只要把127.0.0.1换成IPv6的表示方式[::1]即可。对于ruby,可惜就不是这样了。如果依样画葫芦写出如下代码:
require 'xmlrpc/client'

server = XMLRPC::Client.new2('http://[::1]:4444/usermgmt')
p server.call('list_users', {'namespace'=>0})

那么我们很可能得到下面一条错误信息:
getaddrinfo: Name or service not known (SocketError)

在线文档中可以看到,XMLRPC::Client.new2的代码,可以确信它假设url是IPv4的。不过,不要气馁。我们还有一个最基本的接口:XMLRPC::Client.new,指定host为"::1"(注意,不要加中括号),path设为"/usermgmt",注意前面有个"/",如下:

server = XMLRPC::Client.new('::1', # host
'/usermgmt', # path
8010, # port
nil, # proxy_host
nil, # proxy_port
nil, # user
nil, # password
false, # use_ssl
nil) # timeout (default: 30)

标签:

0 Comments:

发表评论

<< Home