为了使用第三方 API,我需要将 Net::HTTP::Post 请求编码为 MD5 十六进制摘要,然后将其用作签名的一部分。但是,当我尝试简单时Digest::MD5.hexdigest(req)
,它会引发“无法转换为字符串错误”,而当我明确时req.to_s
,它只会给出 MD5#<Net::HTTP::Post:0x112a0eef8>
我只是:
request = Net::HTTP::Post.new(url.path)
request.body = {
"key" => "val"
}.to_json
# later...
hexDigest = Digest::MD5.hexdigest(request)
这是文档化的规范,我认为:“[with the] JSON body contains the new information。”
这是他们提供的相关示例 Java 代码:
ByteArrayOutputStream requestOutputStream = new ByteArrayOutputStream();
httpMethod.getEntity().writeTo(requestOutputStream);
DigestUtils.md5Hex(requestOutputStream.toByteArray()).toLowerCase();
有任何想法吗?谢谢!