Gửi POST Ruby Net::HTTP qua proxy
Cấu hình kết nối HTTP Ruby với một proxy rõ ràng, sau đó gửi dữ liệu biểu mẫu đến đích.
Giữ đích của biểu mẫu trong yêu cầu và proxy trong cấu hình kết nối. Proxy không cần một trường biểu mẫu đặc biệt chứa URL bạn muốn, trừ khi bạn dùng giao diện web-proxy của một trang web cụ thể.
Với Net::HTTP của Ruby, có thể chỉ định một proxy HTTP rõ ràng khi tạo máy khách:
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 chỉ mang tính minh họa; các ứng viên HTTP cho thử nghiệm biểu mẫu công khai được phép có trong danh sách proxy HTTP. Điểm cuối của biểu mẫu phải được thay bằng một dịch vụ được thiết kế để nhận bài gửi. Tài liệu proxy của Net::HTTP cũng mô tả thông tin xác thực proxy và các cài đặt proxy lấy từ môi trường.
Đọc phản hồi trước khi đổ lỗi cho proxy
Máy chủ từ chối biểu mẫu có thể tạo ra lỗi HTTP sau khi tuyến qua proxy đã hoạt động đúng. Kiểm tra trạng thái phản hồi và các yêu cầu của đích: phương thức, loại nội dung, trường biểu mẫu, cookie và mọi token yêu cầu.
Thử thách xác thực proxy đến từ proxy. Đăng nhập ứng dụng hoặc biểu mẫu bị từ chối thuộc về đích. Giữ thông tin xác thực của chúng riêng biệt. Thêm mật khẩu của đích vào cấu hình proxy không thể đáp ứng đăng nhập của đích.
Các quy tắc tiêu đề chuyển tiếp của Squid là một nguồn nhầm lẫn khác có thể xảy ra. Chính sách phía máy chủ của chúng tách biệt với việc dựng một POST Ruby hợp lệ. Đừng sửa quy tắc tiêu đề của một proxy dùng chung chỉ vì biểu mẫu đã thất bại một lần.
Khi thử lại, hãy cân nhắc liệu lần gửi đầu tiên có thể đã được xử lý. Phản hồi bị mất không phải bằng chứng rằng POST chưa bao giờ đến ứng dụng.