Siųsti Ruby Net::HTTP POST per tarpinį serverį
Sukonfigūruokite Ruby HTTP ryšį su aiškiu tarpiniu serveriu, tada siųskite formos duomenis į paskirties vietą.
Formos paskirties vietą laikykite užklausoje, o tarpinį serverį – ryšio konfigūracijoje. Tarpiniam serveriui nereikia specialaus formos lauko su norimu URL, nebent naudojate konkrečios svetainės žiniatinklio tarpinio serverio sąsają.
Ruby Net::HTTP atveju aiškų HTTP tarpinį serverį galima nurodyti kuriant klientą:
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) }
Tarpinis serveris yra iliustracinis; HTTP kandidatai leidžiamiems viešų formų testams pateikiami HTTP tarpinių serverių sąraše. Formos galutinį tašką reikia pakeisti paslauga, skirta priimti pateikimą. Net::HTTP tarpinio serverio dokumentacija taip pat aprašo tarpinio serverio prisijungimo duomenis ir iš aplinkos gaunamus nustatymus.
Perskaitykite atsakymą prieš kaltindami tarpinį serverį
Serveris, atmetantis formą, gali grąžinti HTTP klaidą po to, kai maršrutas per tarpinį serverį veikė tinkamai. Patikrinkite atsakymo būseną ir paskirties vietos reikalavimus: metodą, turinio tipą, formos laukus, slapukus ir bet kokį užklausos žetoną.
Tarpinio serverio autentifikavimo iššūkis kyla iš tarpinio serverio. Programos prisijungimas arba atmesta forma priklauso paskirties vietai. Laikykite jų prisijungimo duomenis atskirai. Paskirties slaptažodžio pridėjimas prie tarpinio serverio konfigūracijos negali patenkinti paskirties prisijungimo.
Squid persiuntimo antraščių taisyklės yra dar vienas galimas painiavos šaltinis. Jų serverio pusės politika atskirta nuo galiojančio Ruby POST kūrimo. Nekeiskite bendro tarpinio serverio antraščių taisyklių vien todėl, kad forma vieną kartą nepavyko.
Kartodami bandymus, apsvarstykite, ar pirmasis pateikimas jau galėjo būti apdorotas. Prarastas atsakymas nėra įrodymas, kad POST niekada nepasiekė programos.