net / http и размещение данных в Google Checkout - PullRequest
1 голос
/ 02 декабря 2009

Я пытаюсь отправить данные формы в Google Checkout, используя следующий код:

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

Когда я пытаюсь отправить запрос с использованием этой строки, я получаю следующую ошибку:

Errno :: ECONNRESET в PaymentsController # create
Сброс соединения по пиру

Есть мысли о том, что может пойти не так?

Ответы [ 2 ]

2 голосов
/ 04 декабря 2009

Метод post_form пытается подключиться через HTTP, даже если это HTTPS. Вы должны явно указать 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) }
0 голосов
/ 03 декабря 2009

Вам нужно сделать чуть больше, чтобы заставить Net :: HTTP выполнить сообщение HTTPS. Пол Госкицки (Paul Goscicki) имеет хорошее резюме, включая пример кода, в своем посте под названием Пользовательские HTTPS-запросы в Ruby .

Лично я бы посоветовал изучить Механизировать . Это намного быстрее и проще в использовании, и имеет множество приятных функций, включая возможность следить за перенаправлениями и обрабатывать куки.

...