2009-12-01 8 views
1

Je suis en train de publier des données de formulaire à Google Checkout en utilisant le code suivant:net/http et l'affichage des données à Google Checkout

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

Lorsque je tente de présenter en utilisant cette ligne, je reçois l'erreur suivante:

Errno :: # ECONNRESET dans PaymentsController de créer
Connexion réinitialisée par les pairs

Toute réflexion sur ce qui pourrait aller mal?

Répondre

0

Vous devez faire un peu plus que cela pour obtenir Net :: HTTP pour effectuer une publication HTTPS. Paul Goscicki a un bon résumé, y compris un exemple de code, dans son article intitulé Custom HTTPS Queries in Ruby.

Personnellement, je suggère de regarder Mechanize. Il est beaucoup plus rapide à utiliser, et a un tas de fonctionnalités intéressantes, y compris la possibilité de suivre les redirections & gérer les cookies.

2

La méthode post_form tente de se connecter via HTTP même de l'uri est HTTPS. Vous devez indiquer explicitement à net/http qu'une connexion sécurisée doit être utilisée. Le script ci-dessous devrait faire ce que vous voulez. Vous pouvez utiliser la méthode set_debug_output pour déboguer la réponse renvoyée par 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) }