Mine - это один из способов сделать это, но я рекомендую это делать, поскольку @yfeldblum рекомендует, просто короткое замыкание downcase
для клавиш заголовка, которые должны иметь свой случай влево.
В нескольких местах в Net :: HTTP :: HTTPHeader заголовки получить сложенном строчные, используя downcase
.
Я думаю, что это довольно решительно изменить это поведение, но это сделает это. Добавьте это в свой источник, и он переопределит методы в модуле HTTPHeader, в которых есть downcase
.
module HTTPHeader
def initialize_http_header(initheader)
@header = {}
return unless initheader
initheader.each do |key, value|
warn "net/http: warning: duplicated HTTP header: #{key}" if key?(key) and $VERBOSE
@header[key] = [value.strip]
end
end
def [](key)
a = @header[key] or return nil
a.join(', ')
end
def []=(key, val)
unless val
@header.delete key
return val
end
@header[key] = [val]
end
def add_field(key, val)
if @header.key?(key)
@header[key].push val
else
@header[key] = [val]
end
end
def get_fields(key)
return nil unless @header[key]
@header[key].dup
end
def fetch(key, *args, &block) #:yield: +key+
a = @header.fetch(key, *args, &block)
a.kind_of?(Array) ? a.join(', ') : a
end
# Removes a header field.
def delete(key)
@header.delete(key)
end
# true if +key+ header exists.
def key?(key)
@header.key?(key)
end
def tokens(vals)
return [] unless vals
vals.map {|v| v.split(',') }.flatten\
.reject {|str| str.strip.empty? }\
.map {|tok| tok.strip }
end
end
Я думаю, что это грубый способ передвижения, но ничего более элегантного не пришло в голову.
Хотя это должно устранить проблему для любых библиотек Ruby с использованием Net :: HTTP, это, вероятно, не удастся для любых камней, использующих Curl или libcurl.
Часто требования (по крайней мере, частично) спорно. И если ваше «требование» - нарушить спецификацию HTTP, вам следует обсудить ад с вашего клиента. Вещи ** будут ** по пути, и вам будет трудно адаптироваться к каждому новому компоненту, который вы вводите. Это включает в себя такие вещи, как прокси, loadbalancers, брандмауэры и веб-серверы. Все эти люди должны будут работать с вашими изменениями, чего очень трудно добиться в каждом случае. Вы должны попытаться найти другое решение или вы будете страдать от боли навсегда :) –
Мне нужно взаимодействовать с сторонней системой, которая нарушает работу rfc. Не так много. –
[FIX ALL THE SYSTEMS] (http://i.stack.imgur.com/UXBEb.jpg) –