Mantingues la destinació del formulari a la petició i el proxy a la configuració de la connexió. Un proxy no necessita un camp de formulari especial amb l'URL que vols, tret que estiguis utilitzant la interfície de proxy web d'un lloc concret.

Per a Net::HTTP de Ruby, es pot proporcionar un proxy HTTP explícit en crear el 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) }

El proxy és il·lustratiu; els candidats HTTP per a proves de formularis públics permeses estan disponibles a la llista de proxys HTTP. El punt final del formulari s'ha de substituir per un servei pensat per acceptar l'enviament. La documentació del proxy de Net::HTTP també descriu les credencials del proxy i la configuració obtinguda de l'entorn.

Llegeix la resposta abans de culpar el proxy

Un servidor que rebutja un formulari pot produir un error HTTP després que la ruta del proxy hagi funcionat correctament. Comprova l'estat de la resposta i els requisits de la destinació: mètode, tipus de contingut, camps del formulari, galetes i qualsevol testimoni de petició.

Un desafiament d'autenticació del proxy prové del proxy. L'inici de sessió d'una aplicació o un formulari rebutjat pertanyen a la destinació. Mantingues les credencials separades. Afegir la contrasenya de la destinació a la configuració del proxy no pot satisfer l'inici de sessió de la destinació.

Les regles de capçaleres de reenviament de Squid són una altra possible font de confusió. La seva política al servidor és independent de construir un POST vàlid de Ruby. No modifiquis les regles de capçaleres d'un proxy compartit només perquè el formulari ha fallat una vegada.

Per als reintents, considera si la primera tramesa ja pot haver estat processada. Una resposta perduda no demostra que un POST no hagi arribat mai a l'aplicació.

Articles relacionats