【问题标题】:HTTParty integer in request headers请求标头中的 HTTParty 整数
【发布时间】:2018-09-07 17:54:07
【问题描述】:

我需要 POST 到 API,这需要请求中的标头 "Timestamp",其值必须是整数(从纪元开始的当前时间为整数)。

我尝试使用HTTPartyNet::HTTP 执行此操作,如下所示:

response = HTTParty.post(route, body: options[:body].to_json,headers: { 'Timestamp' => Time.now.to_i, 'Authorization' => "Bearer #{options[:token]}",'Content-Type' => 'application/json' })
# >> NoMethodError: undefined method `strip' for 1522273989:Integer

它在标头值上调用strip,这会引发错误,因为您不能在整数上调用strip

有人知道如何在请求标头中传递整数吗?

【问题讨论】:

  • 你能给出更完整的堆栈跟踪吗?仅从错误行很难推断出很多内容。
  • 你的问题只是句法上的。 Time.now.to_i.to_s 会成功的。
  • @Sean 堆栈跟踪没有其他内容。这不是我的 API,所以我看不到另一端发生了什么我得到的只是 #
  • @JoshBrody 我试过 .to_s 但不幸的是没有运气。如果这样做,他们会以“检测到重放攻击”的错误回击我,它必须是整数而不是字符串
  • 您不能在标头中发送整数。 tools.ietf.org/html/rfc7230#section-3.2

标签: ruby-on-rails ruby httparty net-http


【解决方案1】:

在整数上调用.to_s

response = HTTParty.post(route, body: options[:body].to_json,headers: { 'Timestamp' => Time.now.to_i.to_s, 'Authorization' => "Bearer #{options[:token]}",'Content-Type' => 'application/json' })

您不能真正在标头中发送整数 - 它是接收端的服务器,必须从请求中转换明文标头。

标题字段是用冒号分隔的明文名称-值对 字符串格式,以回车符 (CR) 和换行符 (LF) 结束 字符序列。
List of HTTP header fields - Wikipedia

【讨论】:

  • 我试过 .to_s 但不幸的是没有运气。如果这样做,他们会以“检测到重放攻击”的错误回击我,它必须是整数而不是字符串。很高兴知道这看起来很奇怪的不仅仅是我。我必须联系 API 开发人员,看看他们是否可以更改它或最终处理转换
  • 他们必须自己处理转换 - IETF 将 HTTP 标头定义为纯文本格式。它只是不可能以任何其他方式做到这一点。你不能把贵宾犬放在传真机里,然后期望在另一端得到一张纸以外的任何东西。
  • 哈哈谢谢我问过他们。我会接受答案,因为没有其他办法。
猜你喜欢
  • 1970-01-01
  • 2017-10-30
  • 2022-08-12
  • 1970-01-01
  • 1970-01-01
  • 2018-12-21
  • 2012-02-09
  • 2020-05-12
  • 1970-01-01
相关资源
最近更新 更多