1

有人可以向我解释为什么在执行此 POST 时出现此错误吗?我从Ruby-docs 页面中提取了片段。

undefined method `hostname' for #URI::HTTP:0x10bd441d8 URL:http://ws.mittthetwitapp.com/ws.phpmywebservice (NoMethodError)

也许我错过了一个要求或什么?

require 'net/http'

uri= URI('http://ws.mywebservice.com/ws.php')
req = Net::HTTP::Post.new(uri.path)
req.set_form_data('xmlPayload' => '<TestRequest><Message>Hi Test</Message></TestRequest>')

res = Net::HTTP.start(uri.hostname, uri.port) do |http|
http.request(req)
end

case res
 when Net::HTTPSuccess, Net::HTTPRedirection
 # OK
else
 res.value
end
4

1 回答 1

3

如果您使用的是 1.9.3 之前的 Ruby 版本,则应使用uri.host.

URI#hostname在 Ruby 1.9.3 中添加。它的不同URI#host之处在于它从 IPv6 主机名中删除了括号。对于非 IPv6 主机名,它的行为应该相同。

实现(来自APIdock):

def hostname
  v = self.host
  /\A\[(.*)\]\z/ =~ v ? $1 : v
end
于 2012-11-18T01:05:02.167 回答