为了使用第三方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();
有什么想法吗? 谢谢!
答案 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()
将返回与请求正文相对应的字节数组。