サード パーティの API を使用するには、Net::HTTP::Post 要求を MD5 16 進ダイジェストとしてエンコードする必要があります。これは署名の一部として使用されます。ただし、単純にしようとすると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] 新しい情報を含む JSON 本体」と思います。
これは、彼らが提供する関連するサンプル Java コードです。
ByteArrayOutputStream requestOutputStream = new ByteArrayOutputStream();
httpMethod.getEntity().writeTo(requestOutputStream);
DigestUtils.md5Hex(requestOutputStream.toByteArray()).toLowerCase();
何か案は?ありがとう!