Envoyer un POST Ruby Net::HTTP via un proxy
Configurez une connexion HTTP Ruby avec un proxy explicite, puis envoyez les données du formulaire à la destination.
Gardez la destination du formulaire dans la requête et le proxy dans la configuration de la connexion. Un proxy n'a pas besoin d'un champ de formulaire spécial contenant l'URL voulue, sauf si vous utilisez l'interface de proxy web d'un site particulier.
Pour Net::HTTP de Ruby, un proxy HTTP explicite peut être fourni lors de la création du client :
require 'net/http'
uri = URI('https://example.com/form')
http = Net::HTTP.new(uri.hostname, uri.port,
'203.0.113.10', 8080)
http.use_ssl = true
http.open_timeout = 5
http.read_timeout = 10
request = Net::HTTP::Post.new(uri.request_uri)
request.set_form_data('message' => 'hello')
response = http.start { |session| session.request(request) }
Le proxy est illustratif ; des candidats HTTP pour des tests de formulaires publics autorisés sont disponibles dans la liste de proxys HTTP. Le point de terminaison du formulaire doit être remplacé par un service destiné à accepter la soumission. La documentation du proxy de Net::HTTP décrit aussi les identifiants de proxy et les réglages dérivés de l'environnement.
Lisez la réponse avant d'accuser le proxy
Un serveur qui rejette un formulaire peut produire une erreur HTTP après que la route via le proxy a fonctionné correctement. Vérifiez le statut de la réponse et les exigences de la destination : méthode, type de contenu, champs du formulaire, cookies et éventuel jeton de requête.
Un défi d'authentification du proxy vient du proxy. Une connexion à l'application ou un formulaire rejeté relève de la destination. Gardez leurs identifiants séparés. Ajouter le mot de passe de la destination à la configuration du proxy ne peut pas satisfaire la connexion à la destination.
Les règles d'en-têtes de transfert de Squid sont une autre source possible de confusion. Leur politique côté serveur est distincte de la construction d'un POST Ruby valide. Ne modifiez pas les règles d'en-têtes d'un proxy partagé simplement parce que le formulaire a échoué une fois.
Pour les nouvelles tentatives, demandez-vous si la première soumission n'a pas déjà été traitée. Une réponse perdue ne prouve pas qu'un POST n'a jamais atteint l'application.