在注释中,HTTP规范说标题不区分大小写,我们需要调用具有区分大小写标头的服务。
以下是我的代码
textfield
自定义标头正在接收为Hmacversion。
我也试过了this,但它没有用。
是否有任何解决方法
答案 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