Wysyłanie POST Ruby Net::HTTP przez proxy
Skonfiguruj połączenie HTTP Ruby z jawnym proxy, a następnie wyślij dane formularza do miejsca docelowego.
Miejsce docelowe formularza trzymaj w żądaniu, a proxy w konfiguracji połączenia. Proxy nie potrzebuje specjalnego pola formularza z żądanym adresem URL, chyba że korzystasz z interfejsu web-proxy konkretnej witryny.
W Net::HTTP Ruby jawne proxy HTTP można podać podczas tworzenia klienta:
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 jest tylko przykładem; kandydaci HTTP do dozwolonych testów publicznych formularzy są dostępni na liście proxy HTTP. Punkt końcowy formularza trzeba zastąpić usługą przeznaczoną do przyjmowania zgłoszenia. Dokumentacja proxy Net::HTTP opisuje także dane uwierzytelniające proxy i ustawienia pochodzące ze środowiska.
Przeczytaj odpowiedź, zanim obwinisz proxy
Serwer odrzucający formularz może zwrócić błąd HTTP po tym, jak trasa przez proxy zadziałała poprawnie. Sprawdź status odpowiedzi i wymagania miejsca docelowego: metodę, typ treści, pola formularza, pliki cookie i ewentualny token żądania.
Wyzwanie uwierzytelniania proxy pochodzi od proxy. Logowanie w aplikacji lub odrzucony formularz należą do miejsca docelowego. Trzymaj ich dane uwierzytelniające osobno. Dodanie hasła miejsca docelowego do konfiguracji proxy nie może spełnić logowania w miejscu docelowym.
Reguły nagłówków przekazywania Squid to kolejne możliwe źródło zamieszania. Ich polityka po stronie serwera jest odrębna od budowania poprawnego POST Ruby. Nie zmieniaj reguł nagłówków współdzielonego proxy tylko dlatego, że formularz raz zawiódł.
Przy ponownych próbach zastanów się, czy pierwsze zgłoszenie nie zostało już przetworzone. Utracona odpowiedź nie dowodzi, że POST nigdy nie dotarł do aplikacji.