Kirim POST Ruby Net::HTTP melalui proxy
Konfigurasikan koneksi HTTP Ruby dengan proxy eksplisit, lalu kirim data formulir ke tujuan.
Simpan tujuan formulir di permintaan dan proxy di konfigurasi koneksi. Proxy tidak memerlukan bidang formulir khusus berisi URL yang Anda inginkan, kecuali Anda memakai antarmuka web-proxy situs tertentu.
Untuk Net::HTTP Ruby, proxy HTTP eksplisit dapat diberikan saat membuat klien:
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 hanya sebagai ilustrasi; kandidat HTTP untuk uji formulir publik yang diizinkan tersedia di daftar proxy HTTP. Titik akhir formulir harus diganti dengan layanan yang dimaksudkan untuk menerima pengiriman. Dokumentasi proxy Net::HTTP juga menjelaskan kredensial proxy dan pengaturan proxy yang berasal dari lingkungan.
Baca respons sebelum menyalahkan proxy
Server yang menolak formulir dapat menghasilkan galat HTTP setelah rute proxy bekerja dengan benar. Periksa status respons dan persyaratan tujuan: metode, tipe konten, bidang formulir, cookie, dan token permintaan apa pun.
Tantangan autentikasi proxy berasal dari proxy. Login aplikasi atau formulir yang ditolak termasuk tujuan. Pisahkan kredensialnya. Menambahkan kata sandi tujuan ke konfigurasi proxy tidak dapat memenuhi login tujuan.
Aturan header penerusan Squid adalah sumber kebingungan lain yang mungkin. Kebijakan sisi servernya terpisah dari menyusun POST Ruby yang valid. Jangan ubah aturan header proxy bersama hanya karena formulir gagal sekali.
Untuk percobaan ulang, pertimbangkan apakah pengiriman pertama sudah diproses. Respons yang hilang bukan bukti bahwa POST tidak pernah mencapai aplikasi.