【问题标题】:use_ssl value changed, but session already started when trying to make https requestuse_ssl 值已更改,但尝试发出 https 请求时会话已开始
【发布时间】:2017-02-01 18:14:20
【问题描述】:

我正在使用 Rails 4.2.7 和这段代码来发出 Net::Http 获取请求

    req = Net::HTTP::Get.new(url)
    if !headers.nil?
      headers.each do |k, v|
        req[k] = v
      end
    end
    res = Net::HTTP.new(uri.host, uri.port).start do |http|
      http.use_ssl = (uri.scheme == "https")
      http.request(req)
    end
    status = res.code
    content_type = res['content-type']
    content_encoding = res['content-encoding']
    content = res.body

但是,当我创建一个方案为“https”的方案时,我收到以下错误

Error during processing: use_ssl value changed, but session already started
/Users/davea/.rvm/rubies/ruby-2.3.0/lib/ruby/2.3.0/net/http.rb:758:in `use_ssl='
/Users/davea/Documents/workspace/myproject/app/helpers/webpage_helper.rb:118:in `block in get_content'
/Users/davea/.rvm/rubies/ruby-2.3.0/lib/ruby/2.3.0/net/http.rb:853:in `start'

如何设置 https 同时仍然能够发出我的 GET 请求?

【问题讨论】:

    标签: ruby-on-rails ruby https request net-http


    【解决方案1】:

    根据文档,use_ssl 必须在开始会话之前设置。

    这是我平时的流程:

    uri          = URI 'some endpoint with encoded params'
    http         = Net::HTTP.new(uri.host, uri.port)
    http.use_ssl = true
    headers      = headers.each_with_object({}) { |(k, v), hash| hash[k] = v }
    http.get(uri.request_uri, initheader = headers)
    

    请参阅get 上的文档。


    关于你的旁注

    if !headers.nil?
    

    如果你只检查是否存在,它会更具可读性:

    if headers.present?
    

    甚至更短:

    if headers # would return true unless it's nil or false
    

    【讨论】:

    • 谢谢,但是您在哪里将标头添加到您的请求中?
    猜你喜欢
    • 2023-03-23
    • 1970-01-01
    • 1970-01-01
    • 2016-05-07
    • 2014-11-03
    • 2011-10-11
    • 2019-09-16
    • 1970-01-01
    • 2018-03-10
    相关资源
    最近更新 更多