127.0.0.1:8080 를 서비스에서 제공한 엔드포인트나 HTTP 프록시 목록의 엔드포인트로 바꾸고, 무해한 HTTPS 목적지를 대상으로 다음을 실행하세요.

curl --noproxy '' --proxy http://127.0.0.1:8080 --connect-timeout 5 --max-time 15 --verbose https://example.com/

루프백 주소는 자신의 컴퓨터에서 대기 중인 리스너를 뜻합니다. 이 명령은 해당 프록시를 명시적으로 선택하고, 이번 호출에 대한 curl의 우회 목록을 비우며, 연결 설정에는 오 초, 전체에는 십오 초의 한도를 둡니다. 브라우저와 시스템의 프록시 설정은 바꾸지 않습니다.

셸에서 curl 이 다른 프로그램의 별칭으로 지정되어 있다면 실제 curl 실행 파일을 사용하세요. curl --version 으로 빌드를 식별할 수 있습니다. 리스너 자체가 TLS를 요구한다면 해당 문서에 명시된 프록시 URL 스킴을 사용하세요.

성공 표시 하나 대신 네 가지 결과 읽기

  1. 선택한 프록시에 연결됨: 해당 주소와 포트에 접근할 수 있습니다.
  2. CONNECT가 수락됨: 프록시가 HTTPS 목적지로 가는 터널을 열었습니다.
  3. 목적지 인증서가 검증됨: 예상한 신뢰 검사를 거쳐 TLS가 완료되었습니다.
  4. 목적지 응답을 받음: 상태와 내용을 살펴 애플리케이션에 필요한 결과인지 확인하세요.

터널이 작동해도 목적지에서 403이나 429가 반환될 수 있습니다. curl은 HTTP 오류 응답을 받은 뒤에도 성공으로 종료할 수 있으므로 응답 상태와 curl의 오류 결과를 모두 기록하세요. TCP 연결이나 CONNECT 성공만으로는 충분하지 않습니다.

반복 비교를 위한 간결한 결과

Unix 계열 셸에서는 본문을 버리고 터널 상태, 목적지 상태, 연결 상대와 경과 시간을 출력할 수 있습니다.

curl --noproxy '' --proxy http://127.0.0.1:8080 --connect-timeout 5 --max-time 15 --silent --show-error --output /dev/null --write-out 'http=%{http_code} connect=%{http_connect} peer=%{remote_ip} total=%{time_total}\n' https://example.com/

http_connect 는 터널 응답을, http_code 는 최종 HTTP 응답을 나타냅니다. remote_ip 는 curl의 연결 상대이며 프록시의 출구 주소를 독립적으로 측정한 값이 아닙니다. 다른 시스템에서는 /dev/null 을 바꾸거나 응답 본문을 보관하세요.

테스트가 실패하면 연결 설정이나 전송 중 실패한 단계를 찾고, 직접 연결이 허용되는 경우 같은 목적지에 직접 접속한 결과와 비교하세요.

curl --noproxy '*' --connect-timeout 5 --max-time 15 --verbose https://example.com/

--noproxy '*' 는 프록시를 우회합니다. 두 경로 모두 인증서 검증에서 실패한다면 공통된 신뢰 문제를 의심할 수 있습니다. 직접 연결은 성공하지만 CONNECT가 거부된다면 프록시 인증이나 정책을 살펴보세요. 상세 출력에는 식별 정보가 포함될 수 있으므로 공유 전에 검토하세요.

결과와 함께 엔드포인트, 대상과 타임스탬프를 저장하세요. 이는 해당 요청에서 무엇이 작동했는지 보여 줍니다. 향후 가용성, 개인정보 보호와 부하가 걸렸을 때의 성능은 별도의 근거가 필요합니다.

관련 글