1

API に対して cURL コマンドを使用するスクリプトを作成しています。リクエストとしてフォーマットされた cURL コマンドを送信しapplication/json、結果を取得します。これを解析して Ruby ハッシュに変換します。

これは、cURL POST コマンドを使用して正しくフォーマットされた JSON 応答を取得するときにうまく機能します。ただし、cURL GET コマンドを使用すると、ヘッダーを持つ JSON ドキュメントが返されます。

puts r:

HTTP/1.1 200 OK
X-Compute-Request-Id: req-7e625990-068b-47d1-8c42-9d3dd3b27050
Content-Type: application/json
Content-Length: 1209
Date: Wed, 16 Jan 2013 20:47:41 GMT

{ <JSON DATA> }

しようとするとJSON.parse(r)、'HTTP/1.1.' で予期しないトークン エラーが発生します。

これのための私の方法:

def list_flavors

    r = %x(curl -s -k -D - -H \"X-Auth-Token: #{$token}\" -X 'GET' http://10.30.1.49:8774/v2/27e60c130c7748f48b0e3e9175702c30/flavors -H 'Content-type:     application/json')

   response = JSON.parse(r)

   response
end

正規表現を使用して JSON ドキュメントから本文を取り出して解析する方法はありますか?

または、cURL からの応答を取得するときに、これについて間違った方法で行っていますか?

4

1 に答える 1

2

文字列をに渡す前に、そのヘッダーを切り取る方法を見つける必要がありますJSON.parseJSON.parse有効なjsonのみが必要です。

物事を丸くして文字列として使用するのではなく、非常に用途の広いruby Net :: HTTPおよび/またはOpenURIライブラリを使用することをお勧めします。これにより、ヘッダーなしで応答の本文だけに簡単にアクセスできます。

于 2013-01-16T21:08:32.107 に答える