Enviar un POST de Ruby Net::HTTP a través dun proxy
Configure unha conexión HTTP de Ruby cun proxy explícito e despois envíe os datos do formulario ao destino.
Manteña o destino do formulario na solicitude e o proxy na configuración da conexión. Un proxy non necesita un campo de formulario especial co URL que desexa, agás que estea a usar a interface de proxy web dun sitio concreto.
Para Net::HTTP de Ruby, pódese proporcionar un proxy HTTP explícito ao crear o cliente:
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) }
O proxy é ilustrativo; os candidatos HTTP para probas de formularios públicos permitidas están dispoñibles na lista de proxies HTTP. O punto de conexión do formulario debe substituírse por un servizo destinado a aceptar o envío. A documentación do proxy de Net::HTTP tamén describe as credenciais do proxy e os axustes derivados da contorna.
Lea a resposta antes de culpar o proxy
Un servidor que rexeita un formulario pode producir un erro HTTP despois de que a ruta do proxy funcionase correctamente. Comprobe o estado da resposta e os requisitos do destino: método, tipo de contido, campos do formulario, cookies e calquera token de solicitude.
Un desafío de autenticación do proxy vén do proxy. O inicio de sesión da aplicación ou un formulario rexeitado pertencen ao destino. Manteña as súas credenciais separadas. Engadir o contrasinal do destino á configuración do proxy non pode satisfacer o inicio de sesión do destino.
As regras de cabeceiras de reenvío de Squid son outra posible fonte de confusión. A súa política no servidor é independente de construír un POST válido de Ruby. Non modifique as regras de cabeceiras dun proxy compartido só porque o formulario fallou unha vez.
Para os reintentos, considere se o primeiro envío xa puido procesarse. Unha resposta perdida non demostra que un POST nunca chegue á aplicación.