Эта ошибка возникает из-за того, что Фарадей по умолчанию использует Net :: HTTP, а Net :: HTTP изменяет регистр ключей заголовка . Вы можете прочитать больше об этой проблеме в этот связанный вопрос .
Вы можете обойти это, используя один из других доступных адаптеров, перечисленных в https://lostisland.github.io/faraday/adapters/:
Или внешние адаптеры, для которых требуется другой драгоценный камень:
Ваша конкретная реализация Patron выглядит правильно, поэтому попробуйте использовать один из других адаптеров, чтобы узнать, повезет ли вам больше.
Обновление
Я загрузил ваш обновленный пример и протестировал его сам. Решением является использование строковых ключей. Вы используете символические ключи.
# symbolized
headers = { API_SIGNATURE: '', API_REQUEST_TIME: '' }
=> {
:API_SIGNATURE => "",
:API_REQUEST_TIME => ""
}
Это возвращает:
puts conn.headers
{"Api-Signature"=>"", "Api-Request-Time"=>"", "User-Agent"=>"Faraday v0.17.0"}
против:
# stringified
headers = { 'API_SIGNATURE' => '', 'API_REQUEST_TIME' => '' }
=> {
"API_SIGNATURE" => "",
"API_REQUEST_TIME" => ""
}
Теперь вы получите правильные значения:
puts conn.headers
{"API_SIGNATURE"=>"", "API_REQUEST_TIME"=>"", "User-Agent"=>"Faraday v0.17.0"}
На первый взгляд, ваш оригинальный пример выглядит строковым, но не является (поэтому я его не уловил):
{
'API_SIGNATURE': '',
'API_REQUEST_TIME': ''
}
=> {
:API_SIGNATURE => "",
:API_REQUEST_TIME => ""
}
Использование двоеточия для хешаКлюч в Ruby автоматически делает его символом, даже если это строка в кавычках. Вам нужно использовать синтаксис хеш-ракеты для строковых ключей.