【问题标题】:How to preserve custom headers case in ruby 2.6.5如何在 ruby​​ 2.6.5 中保留自定义标题大小写
【发布时间】:2020-11-13 05:15:25
【问题描述】:

尝试使用 curl cmd 时我可以访问 api,但同样无法使用 net/http 访问,

我按照这个链接 Preserving case in HTTP headers with Ruby's Net:HTTP 做了字符串补丁,它在 ruby​​ 2.2.4 上运行良好,

但是最近我们迁移到了 ruby​​ 2.6.5 版本,从那以后我们又遇到了这个问题。

谁能帮帮我。

示例代码

token = JSON.parse(token_id)
  request = Net::HTTP::Get.new(uri)
  sso_token = token["headers"][0]["value"][0]
  request[CaseSensitiveString.new('sso_token')] = sso_token
  request["Accept"] = "application/json"
  req_options = {
      use_ssl: uri.scheme == "https"
  }
  response = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
    http.request(request)
  end
  response.code
  response.body

class CaseSensitiveString < String
def downcase
  self
end
def capitalize
  self
end

结束

【问题讨论】:

  • 您能否添加一些代码让我们更好地了解您的设置?
  • 嗨@bwalshy 我已经添加了示例代码,请检查一下
  • @anothermh - 它需要 curl lib.dll 来处理 http 请求,请您提供 net/http 对我们有帮助吗
  • 正如链接问题中接受的答案所指出的那样,Net::HTTP 没有可靠的长期解决方案来允许这样做。正确的答案是使用不需要额外步骤、丑陋的 hack 或猴子补丁的东西。

标签: ruby net-http


【解决方案1】:

抱歉,我需要修补 net/http,因为我们有大型现有项目,并且它使用 ruby​​ 2.5 及更高版本的以下代码

module Net::HTTPHeader 
    def capitalize(name)
     name 
    end 
    private :capitalize 
end

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-12-27
    • 2014-10-20
    • 2010-12-09
    • 1970-01-01
    • 1970-01-01
    • 2020-06-19
    • 2019-04-09
    相关资源
    最近更新 更多