Trimiteți un POST Ruby Net::HTTP printr-un proxy
Configurați o conexiune HTTP Ruby cu un proxy explicit, apoi trimiteți datele formularului la destinație.
Păstrați destinația formularului în cerere și proxy-ul în configurația conexiunii. Un proxy nu are nevoie de un câmp special de formular cu URL-ul dorit, decât dacă folosiți interfața web-proxy a unui anumit site.
Pentru Net::HTTP din Ruby, un proxy HTTP explicit poate fi furnizat la crearea clientului:
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) }
Proxy-ul este doar ilustrativ; candidații HTTP pentru teste permise ale formularelor publice sunt disponibili în lista de proxy-uri HTTP. Endpoint-ul formularului trebuie înlocuit cu un serviciu destinat să accepte trimiterea. Documentația proxy-ului Net::HTTP descrie și acreditările proxy și setările derivate din mediu.
Citiți răspunsul înainte de a da vina pe proxy
Un server care respinge un formular poate produce o eroare HTTP după ce ruta prin proxy a funcționat corect. Verificați starea răspunsului și cerințele destinației: metoda, tipul de conținut, câmpurile formularului, cookie-urile și orice token de cerere.
O provocare de autentificare a proxy-ului vine de la proxy. O autentificare în aplicație sau un formular respins aparțin destinației. Păstrați acreditările separate. Adăugarea parolei destinației în configurația proxy-ului nu poate satisface autentificarea destinației.
Regulile Squid pentru anteturile de redirecționare sunt o altă posibilă sursă de confuzie. Politica lor pe partea de server este separată de construirea unui POST Ruby valid. Nu modificați regulile de antet ale unui proxy partajat doar pentru că formularul a eșuat o dată.
La reîncercări, luați în considerare dacă prima trimitere ar putea fi deja procesată. Un răspuns pierdut nu este dovada că un POST nu a ajuns niciodată la aplicație.