Inviare un POST di Ruby Net::HTTP tramite un proxy
Configura una connessione HTTP Ruby con un proxy esplicito, poi invia i dati del modulo alla destinazione.
Mantieni la destinazione del modulo nella richiesta e il proxy nella configurazione della connessione. Un proxy non richiede un campo modulo speciale con l'URL desiderato, a meno che tu non stia usando l'interfaccia web-proxy di un sito specifico.
Per Net::HTTP di Ruby, è possibile fornire un proxy HTTP esplicito quando si crea il 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) }
Il proxy è illustrativo; candidati HTTP per test di moduli pubblici consentiti sono disponibili nella lista di proxy HTTP. L'endpoint del modulo deve essere sostituito con un servizio destinato ad accettare l'invio. La documentazione del proxy di Net::HTTP descrive anche le credenziali del proxy e le impostazioni derivate dall'ambiente.
Leggi la risposta prima di incolpare il proxy
Un server che rifiuta un modulo può produrre un errore HTTP dopo che il percorso tramite proxy ha funzionato correttamente. Controlla lo stato della risposta e i requisiti della destinazione: metodo, tipo di contenuto, campi del modulo, cookie e qualsiasi token di richiesta.
Una richiesta di autenticazione del proxy proviene dal proxy. Un accesso all'applicazione o un modulo rifiutato appartengono alla destinazione. Tieni separate le credenziali. Aggiungere la password della destinazione alla configurazione del proxy non può soddisfare l'accesso alla destinazione.
Le regole di intestazione di inoltro di Squid sono un'altra possibile fonte di confusione. La loro politica lato server è separata dalla costruzione di un POST Ruby valido. Non modificare le regole di intestazione di un proxy condiviso solo perché il modulo è fallito una volta.
Per i tentativi successivi, considera se il primo invio potrebbe essere già stato elaborato. Una risposta persa non è prova che un POST non abbia mai raggiunto l'applicazione.