1

私は奇妙な問題を抱えていますが、それはほんの小さな明らかなエラーだと感じています。

次の実装を行うとき;

url = URI.parse(helper.full_url)
req = Net::HTTP::Get.new(url.to_s)
res = Net::HTTP.start(url.host, url.port) { |http|
  http.request(req)
}

以下のエラーが表示されます。

Timeout :: Error

しかし、この実装;

url = URI.parse(helper.full_url)
req = Net::HTTP::Get.new(url.to_s)
res = Net::HTTP.start(url.host, url.port) { |http|
  http.use_ssl = true
  http.request(req)
}

このエラーが発生します。

IOError: use_ssl value changed, but session already started

何が問題なのですか?

4

1 に答える 1

3

Net::HTTP.start の後に http.use_ssl を使用することはできません。前に使用する必要があります。http://www.ruby-doc.org/stdlib-1.9.2/libdoc/net/http/rdoc/Net/HTTP.html#method-i-use_ssl-3Dを見てください。

# File net/http.rb, line 591
def use_ssl=(flag)
  flag = (flag ? true : false)
  if started? and @use_ssl != flag
    raise IOError, "use_ssl value changed, but session already started"
  end
  @use_ssl = flag
end

これを試して:

uri = URI.parse(helper.full_url)
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = true if uri.scheme == 'https'

http.start do
  request = Net::HTTP::Get.new(uri.request_uri)
  puts http.request(request)
end
于 2013-10-27T20:25:14.907 に答える