1

次のコードを使用して、フォーム データを Google Checkout に投稿しようとしています。

x = Net::HTTP.post_form(URI.parse('https://checkout.google.com/api/checkout/v2/checkoutForm/Merchant/[merchant_number_here]'), @params)

この行を使用して送信しようとすると、次のエラーが発生します。

Errno::ECONNRESET in PaymentsController#create
接続がピアによってリセットされました

何がうまくいかないのかについて何か考えはありますか?

4

2 に答える 2

2

このメソッドpost_formは、URI が HTTPS であっても HTTP 経由で接続しようとします。安全な接続を使用する必要があることを net/http に明示的に伝える必要があります。以下のスクリプトは、あなたが望むことをするはずです。メソッドを使用してset_debug_output、Google から返された応答をデバッグできます。

require 'net/http'
require 'net/https'

url = URI.parse('https://checkout.google.com/api/checkout/v2/checkoutForm/Merchant/1234567890')
req = Net::HTTP::Post.new(url.path)

req.set_form_data({'my'=>'params'})
res = Net::HTTP.new(url.host, url.port)
res.use_ssl = true

#send the response to stderr for debugging
res.set_debug_output $stderr

res.start {|http| http.request(req) }
于 2009-12-03T22:25:35.150 に答える
0

Net :: HTTPを取得してHTTPSポストを実行するには、それよりもかなり多くのことを行う必要があります。Paul Goscickiは、 RubyのカスタムHTTPSクエリというタイトルの投稿に、サンプルコードを含む優れた要約を掲載しています。

個人的には、 Mechanizeを調べることをお勧めします。はるかに高速で使いやすく、リダイレクトを追跡したりCookieを処理したりする機能などの優れた機能がたくさんあります。

于 2009-12-02T23:59:56.427 に答える