如何在ruby中保留自定义标题大小写

时间:2017-03-15 16:15:53

标签: ruby http http-headers case-sensitive custom-headers

在注释中,HTTP规范说标题不区分大小写,我们需要调用具有区分大小写标头的服务。

以下是我的代码

textfield

自定义标头正在接收为Hmacversion。

我也试过了this,但它没有用。

是否有任何解决方法

2 个答案:

答案 0 :(得分:1)

如果可能的话,我会尝试通过将请求标头密钥视为区分大小写来"Field names are case-insensitive"来更改违反HTTP标准的服务器。这个错误会破坏浏览器,缓存等等。

如果你无法修复它,我可能会尝试another HTTP client library保留大小写,而不是Net :: HTTP。只需确保库在后台不使用Net :: HTTP。例如,您可以尝试使用Excon(我不确定它是否保留了大小写,但它有很多低级控制)。

答案 1 :(得分:0)

使用以下代码强制区分大小写的标头。

class CaseSensitivePost < Net::HTTP::Post
  def initialize_http_header(headers)
    @header = {}
    headers.each{|k,v| @header[k.to_s] = [v] }
  end

  def [](name)
    @header[name.to_s]
  end

  def []=(name, val)
    if val
      @header[name.to_s] = [val]
    else
      @header.delete(name.to_s)
    end
  end

  def capitalize(name)
    name
  end
end

用法示例:

post = CaseSensitivePost.new(url, {myCasedHeader: '1'})
post.body = body
http = Net::HTTP.new(host, port)
http.request(post)

其他人建议创建自定义字符串类,它不会被降级或大写。 https://stackoverflow.com/a/42121370/979995