这是HTTPClient
的源代码:
def post(uri, *args, &block)
request(:post, uri, argument_to_hash(args, :body, :header, :follow_redirect), &block)
end
我做了以下包装:
def post(uri, *args, &block)
http.post(uri, args, &block)
rescue Exception => ex
log_exception ex
end
尝试传递参数:
httpclient.post 'url', xml_data, 'Content-Type' => 'application/xml'
my_proxy.post 'url', xml_data, 'Content-Type' => 'application/xml'
首先,HTTPclient收到以下args:
[
"my xml text",
{"Content-Type"=>"application/xml"}
]
在第二种情况下:
[
[
"my xml text",
{"Content-Type"=>"application/xml"}
]
]
如何以正确的方式传递参数?
答案 0 :(得分:1)
def post(uri, *args, &block)
http.post(uri, *args, &block)
# ...
请注意第二行中的星号(或代码中没有星号)。那是" splat" operator,在方法调用中将数组解包为单独的参数,并在方法定义中将参数打包到一个数组中。你在方法定义中打包参数(所以你的args
是一个参数数组),但是在没有解压缩的情况下将该数组传递给post
,它不需要数组。
答案 1 :(得分:0)
我认为
def proxy(uri, *args, &block)
http.post(uri, *args, &block)
# ...
应该做的伎俩,基本上是#34; unsplatting" (*
是splat运算符)args-array。