0

サード パーティの 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();

何か案は?ありがとう!

4

2 に答える 2

0

「to_s」メソッドを明示的に呼び出すようにしてください。役立つはずです。

hexDigest = Digest::MD5.hexdigest(request.to_s)
于 2013-02-03T20:20:31.010 に答える
0

これらの行に相当する ruby​​ コードは次のとおりです。

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

httpMethod.getEntity()リクエストボディとして定義されたjsonを返します。

requestOutputStream.toByteArray()リクエストボディに対応するバイト配列を返します。

于 2013-04-23T16:14:10.623 に答える