폼의 목적지는 요청에, 프록시는 연결 설정에 둡니다. 특정 사이트의 웹 프록시 인터페이스를 쓰는 경우가 아니라면, 프록시에 원하는 URL을 담은 특별한 폼 필드는 필요하지 않습니다.

Ruby의 Net::HTTP에서는 클라이언트를 만들 때 명시적 HTTP 프록시를 지정할 수 있습니다.

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) }

프록시는 예시일 뿐입니다. 허용된 공개 폼 테스트용 HTTP 후보는 HTTP 프록시 목록에서 찾을 수 있습니다. 폼 엔드포인트는 제출을 받도록 만들어진 서비스로 바꿔야 합니다. Net::HTTP의 프록시 문서에는 프록시 자격 증명과 환경에서 가져온 프록시 설정도 설명되어 있습니다.

프록시를 탓하기 전에 응답을 읽으세요

폼을 거부하는 서버는 프록시 경로가 올바르게 동작한 뒤에도 HTTP 오류를 낼 수 있습니다. 응답 상태와 목적지의 요구 사항을 확인하세요. 메서드, 콘텐츠 유형, 폼 필드, 쿠키, 요청 토큰 등입니다.

프록시 인증 요구는 프록시에서 옵니다. 애플리케이션 로그인이나 거부된 폼은 목적지에 속합니다. 두 자격 증명은 분리해 두세요. 목적지 비밀번호를 프록시 설정에 추가해도 목적지 로그인을 충족할 수 없습니다.

Squid의 전달 헤더 규칙도 혼란의 원인이 될 수 있습니다. 그 서버 측 정책은 유효한 Ruby POST를 구성하는 것과 별개입니다. 폼이 한 번 실패했다고 공유 프록시의 헤더 규칙을 바꾸지 마세요.

재시도할 때는 첫 제출이 이미 처리되었을 가능성을 고려하세요. 응답이 사라진 것은 POST가 애플리케이션에 도달하지 않았다는 증거가 아닙니다.

관련 글