【问题标题】:Faraday is changing my headers from uppercase to capitalize case法拉第正在将我的标题从大写更改为大写
【发布时间】:2019-10-18 14:54:25
【问题描述】:

我正在使用 Faraday 创建一个将与 API 交互的 SDK,我需要发送两个标头 API_SIGNATUREAPI_REQUEST_TIME,这就是我创建的:

class APIClient
  def initialize(api_key)
    @api_key = api_key
  end

  def get_users
    request.post('/users')
  end

  private

  def request
    Faraday.new(@@BASE_API_URL, headers: headers)
  end

  def headers
    timestamp = Time.now.to_i.to_s
    return {
      API_SIGNATURE: Digest::MD5.hexdigest(@api_key + timestamp),
      API_REQUEST_TIME: timestamp
    }
  end
end

由于某种原因,法拉第将 API_SIGNATURE 更改为 Api-SignatureAPI_REQUEST_TIME 更改为 Api-Request-Time。是否有可能防止这种情况发生?

谢谢。

【问题讨论】:

  • HTTP 标头字段不区分大小写。没关系:stackoverflow.com/a/5259004/823617 告诉 API 创建者他们的 API 不符合规范。
  • 同意。不过,他们正在开发新的 API。

标签: ruby hash faraday


【解决方案1】:

您可以将键更改为字符串,但您会发现 Net::HTTP 将键更改为:Api_signatureApi_request_time。更多信息请看这里:https://github.com/lostisland/faraday/issues/747#issuecomment-439864181

您可以解决这个问题的一种方法是创建一个不会像这样将自身小写的 String 类,虽然它有点 hacky:

class UpperCaseString < String
  def downcase
    self
  end
end

然后像这样定义你的标题:

  def headers
    timestamp = Time.now.to_i.to_s
    return {
      UpperCaseString.new('API_SIGNATURE') => Digest::MD5.hexdigest(@api_key + timestamp),
      UpperCaseString.new('API_REQUEST_TIME') => timestamp
    }
  end

可能更好的是使用不同的适配器,如赞助人。将其添加到您的 Gemfile 中,然后调整请求以使用它:

  def request
    Faraday.new(@@BASE_API_URL, headers: headers) do |faraday|
      faraday.adapter :patron
    end
  end

在这种情况下,您仍然需要确保您的标题是字符串而不是符号:

  def headers
    timestamp = Time.now.to_i.to_s
    {
      'API_SIGNATURE' => Digest::MD5.hexdigest(@api_key + timestamp),
      'API_REQUEST_TIME' => timestamp
    }
  end

【讨论】:

  • 请注意,return 不是必需的,如果省略,该值将隐式返回。
  • @rainkinz 使用保护适配器失败,并出现patron/session.rb:330:in handle_request':操作在 1002 毫秒后超时,收到 0 个字节中的 0 个 (Faraday::TimeoutError)`。有什么想法吗?
  • 听起来您的@@BASE_API_URL 不是您可以访问的。您是否尝试过 ping 它或使用浏览器访问 URL?
  • 我相信这是因为标题没有改变。我刚刚使用puts request.headers检查了它们。
猜你喜欢
  • 2010-11-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-12-05
  • 1970-01-01
  • 2020-03-22
  • 2023-04-05
  • 2010-09-18
相关资源
最近更新 更多