2017-05-06 2 views
0

J'essaye d'envoyer quelques paramètres à ce site Web (http://www.degraeve.com/translator.php) et obtenir la réponse à mon application de rails. Je veux sélectionner 'binaire' parmi les boutons radio dont le nom est 'd' et mettre juste 'a' sur le champ de texte dont le nom est 'w' à traduire. J'utilise cette action sur mon contrôleur:Publier sur le formulaire d'un autre site et obtenir une réponse avec Rails

class RoomsController < ApplicationController 
    require "uri" 
    require "net/http" 
    require 'json' 


    def test  

    uri = URI.parse("http://www.degraeve.com/translator.php") 
    header = {'Content-Type': 'text/json'} 
    params = { d: 'binary', w: 'a' } 

    # Create the HTTP objects 
    http = Net::HTTP.new(uri.host, uri.port) 
    request = Net::HTTP::Post.new(uri.request_uri, header) 
    request.body = params.to_json 

    # Send the request 
    response = http.request(request) 
    render json: response.body 
    end 
end 

Y at-il quelque chose de mal? Il rend juste le corps de http://www.degraeve.com/translator.php avant de soumettre le formulaire, mais je voudrais obtenir le corps après qu'il a été soumis.

Répondre

1

Lorsque vous regardez ce qui se passe après avoir appuyé sur "Traduire!" bouton, vous pouvez remarquer qu'il n'y a aucun formulaire soumis via POST. Au lieu de cela, une requête GET est envoyée et un fichier HTML est renvoyé - voyez par vous-même dans l'inspecteur de réseau de votre navigateur.

Par conséquent, vous pouvez envoyer une simple requête GET avec une URL préparée, comme celui-ci (notez les d et w paramètres de requête):

uri = URI.parse("http://www.degraeve.com/cgi-bin/babel.cgi?d=binary&url=http%3A%2F%2Fwww.multivax.com%2Flast_question.html&w=a") 
response = Net::HTTP.get_print(uri) 

puis analyser la réponse en conséquence.

+0

Merci pour la réponse! –