1

このリクエストを複製できるルビーカールライブラリはありますか?

curl -d '<hello xmlns="http://checkout.google.com/schema/2"/>' https://S_MERCHANT_ID:S_MERCHANT_KEY@sandbox.google.com/checkout/api/checkout/v2/request/Merchant/S_MERCHANT_ID

curbを試しましたが、PostField.contentクラスがgoogleのチェックアウトAPIと連携していません。これが私の縁石リクエストからのコードです:

c = Curl::Easy.new("https://MY_ID:MY_KEY@sandbox.google.com/checkout/api/checkout/v2/request/Merchant/MY_ID_AGAIN")
c.http_auth_types = :basic
c.username = 'MY_ID'
c.password = 'MY_KEY'
# c.headers["data"] = '<?xml version="1.0" encoding="UTF-8"?><hello xmlns="http://checkout.google.com/schema/2"/>'
c.http_post(Curl::PostField.content('', '<?xml version="1.0" encoding="UTF-8"?><hello xmlns="http://checkout.google.com/schema/2"/>'))
c.perform

私はrubyのシステムコマンドを使用してそれを動作させることができましたが、それからの応答を処理する方法がわかりません。

req = system("curl -d '<hello xmlns=\"http://checkout.google.com/schema/2\"/>' https://MY_ID:MY_KEY@sandbox.google.com/checkout/api/checkout/v2/request/Merchant/MY_ID")

私は今2時間そこにいます。どんな助けでも大歓迎です、ありがとう!

4

5 に答える 5

2

IO.popen子プロセスから読み取るために使用できます。

IO.popen(['curl', '-o', '-', '-d', ..., err: [:child, :out]]) do |io|
  response = io.read
end

この例では、標準出力と標準エラーを子プロセスの1つのストリームに結合し、curlにを介して出力を標準出力にリダイレクトさせます-o。の代わりに他のオプションを指定します...

于 2012-10-18T00:47:04.357 に答える
1

私は常にこのようなユースケースにRestClientgemを使用します。これは非常に簡単に使用でき、すべてのRESTリクエストにチューニングパラメーターのバッチ全体が含まれています。

コードは次のようになります。

url = "sandbox.google.com/checkout/api/checkout/v2/request/Merchant/#{S_MERCHANT_ID}"
credentials = "#{S_MERCHANT_ID}:#{S_MERCHANT_KEY}"
RestClient.post "https://credentials@#{url}", '<hello xmlns="http://checkout.google.com/schema/2"/>' 
于 2012-10-18T05:00:14.030 に答える
0

または、Typheous(https://github.com/typhoeus/typhoeus)などのHTTPリクエストライブラリを使用することもできます。「カール」と結びつくものはありますか?

于 2012-10-18T00:27:34.520 に答える
0

curlで結果をファイルに入れてから、rubyを使用してファイルを開き、それを読み取ります(File.open)

または私たちhttparty

于 2012-10-18T00:27:58.207 に答える
0

私はそれを理解しました(YAAAAY!)

他の誰かがこの問題を抱えている場合は、ここに解決策があります。

実行可能コマンドはコマンドラインで正常に機能しますが、コントローラーからの実行可能コマンドの出力をRailsでレンダリングしようとしている場合は、render:textではなくrender:jsonを使用して結果を出力してください。

何らかの理由で、render:textは、コマンドの出力の一部のみを出力していました(そして、その過程で私を狂わせました)。

RailsでGoogleCheckoutと統合しようとしている人のために、Googleにhttpリクエストを行う方法は次のとおりです。

最初のステップ:Gemfileにrest-clientを追加します。コマンドラインから実行する方法は次のとおりです。

$ cd /path/to/your/rails/app
$ sudo nano Gemfile

次に、Gemfileのどこかに以下を配置して、gemをgemfileに追加します。

$ gem "rest-client"

次に、バンドルインストールを実行します

$ bundle install

サーバーを再起動します。apache2の場合:

$ sudo service apache2 reload

webrickの場合:

$ rails s

次に、コントローラーで(レールが設定されていて、ブラウザーからコントローラーにアクセスできると仮定して)、次のコードを記述します。

$ url = "https://YOUR_GOOGLE_CHECKOUT_MERCHANT_ID:YOUR_GOOGLE_CHECKOUT_KEY@sandbox.google.com/checkout/api/checkout/v2/request/Merchant/YOUR_GOOGLE_CHECKOUT_MERCHANT_ID"
$ req = RestClient.post(url, '<hello xmlns="http://checkout.google.com/schema/2"/>')
render :json => req

YOUR_GOOGLE_MERCHANT_IDを実際の販売者IDに置き換え、YOUR_GOOGLE_CHECKOUT_KEYを実際のGoogleCheckoutキーに置き換えることを忘れないでください

<?xml version="1.0" encoding="UTF-8"?>
<bye xmlns="http://checkout.google.com/schema/2" serial-number="1dfc3b90-1fa6-47ea-a585-4d5482b6c785" />

(nexoの好意で答えてください)

于 2012-10-18T20:34:30.777 に答える