将Rails Net :: HTTP请求转换为MD5 Hex Digest

时间:2013-02-03 20:01:04

标签: ruby-on-rails ruby http-post md5

为了使用第三方API,我需要将Net :: HTTP :: Post请求编码为MD5十六进制摘要,然后将其用作签名的一部分。但是,当我尝试简单地Digest::MD5.hexdigest(req)时,它会抛出“无法转换为字符串错误”,而当我明确req.to_s时,它只会给出#<Net::HTTP::Post:0x112a0eef8>的MD5

我只是:

request = Net::HTTP::Post.new(url.path)
request.body = {
  "key" => "val"
}.to_json
# later...
hexDigest = Digest::MD5.hexdigest(request)

这是文档化的规范,我认为:“[包含] JSON正文包含新信息。”

这是他们提供的相关示例Java代码:

ByteArrayOutputStream requestOutputStream = new ByteArrayOutputStream();
httpMethod.getEntity().writeTo(requestOutputStream);
DigestUtils.md5Hex(requestOutputStream.toByteArray()).toLowerCase();

有什么想法吗? 谢谢!

2 个答案:

答案 0 :(得分:0)

尝试显式调用'to_s'方法,它应该有帮助:

hexDigest = Digest::MD5.hexdigest(request.to_s)

答案 1 :(得分:0)

这些行的等效ruby代码是:

OpenSSL::Digest::MD5.hexdigest(request.body)

httpMethod.getEntity()将返回定义为请求主体的json。

requestOutputStream.toByteArray()将返回与请求正文相对应的字节数组。