我需要在特定字符的情况下发送HTTP header 。我知道这违反了RFC,但是我有一个要求。
http.get似乎改变了我提供的 header 字典的大小写。如何保存字符大小写?

最佳答案

根据Tin Man的回答,即Net::HTTP库正在您的自定义 header 键(和所有 header 键)上调用#downcase,这里有一些其他选项不能完全修补整个Net::HTTP

您可以尝试以下方法:

custom_header_key = "X-miXEd-cASe"
def custom_header_key.downcase
  self
end

为避免清除方法缓存,请将以上结果存储在类级常量中:
custom_header_key = "X-miXEd-cASe"
def custom_header_key.downcase
  self
end
CUSTOM_HEADER_KEY = custom_header_key

或子类String重写该特定行为:
class StringWithIdentityDowncase < String
  def downcase
    self
  end
end

custom_header_key = StringWithIdentityDowncase.new("X-miXEd-cASe")

10-06 12:56