如何在ruby 2.6.5中保留自定义头文件大小写

ltqd579y  于 2023-06-22  发布在  Ruby
关注(0)|答案(2)|浏览(109)

我能够访问API时,尝试wit curl cmd,但同样无法访问与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

结束

41ik7eoe

41ik7eoe1#

抱歉,我需要修补net/http,因为我们有一个大型的现有项目,它的工作与下面的代码为ruby2.5及以上

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

jobtbby32#

现在在Ruby 3.0.6中遇到了这个问题。查看Net::HTTP::Header代码,我发现在头上执行了split(https://github.com/wycats/net-http/blob/master/lib/net2/http/header.rb#LL177C13-L177C13)。因此,CaseSensitiveString现在应该实现一个split方法,生成一个CaseSensitiveString数组:

class CaseSensitiveString < String
  def downcase
    self
  end

  def capitalize
    self
  end

  def split(arg)
    super(arg).map { |str| CaseSensitiveString.new(str) }
  end

  def to_s
    self
  end
end

相关问题