curl 프록시 테스트에서 HTTP 000은 무슨 뜻일까?
000은 웹사이트가 보낸 HTTP 상태가 아닙니다. 출력된 HTTP 필드와 함께 curl 종료 코드와 오류 메시지를 읽어야 합니다.
curl 테스트에서 HTTP 상태로 000이 출력되면 보고할 최종 HTTP 응답 코드를 얻지 못했다는 뜻입니다. 웹사이트가 000이라는 실제 HTTP 상태를 보낸 것은 아닙니다.
오류도 함께 기록하기
다음 POSIX 셸 예제는 최종 HTTP 필드, CONNECT 필드, curl 프로세스의 종료 코드를 출력합니다.
curl --proxy http://203.0.113.10:8080 --noproxy '' --connect-timeout 5 --max-time 15 --silent --show-error --output /dev/null --write-out 'http=%{http_code} connect=%{http_connect}\n' https://example.com/
result=$?
printf 'curl_exit=%s\n' "$result"
예제의 엔드포인트를 사용 중인 HTTP 프록시나 HTTP 프록시 목록에서 고른 후보로 바꾸세요. show-error는 켜 두세요. 오류 메시지가 가장 유용한 정보일 때가 많습니다. CONNECT 필드는 터널을 사용할 때 의미가 있으며, 웹사이트가 보낸 두 번째 최종 상태가 아닙니다.
값을 함께 읽기
- 프록시 연결에 실패하면 HTTP 필드가 000으로 남을 수 있습니다.
- 응답을 받기 전에 시간 초과가 발생해도 같은 결과가 나올 수 있습니다.
- CONNECT 응답은 성공했지만 뒤이어 TLS 오류가 발생하면 connect=200, http=000으로 나타날 수 있습니다.
- 403처럼 웹사이트의 응답을 온전히 받은 경우는 다릅니다. 살펴볼 실제 HTTP 응답이 있습니다.
정확한 종료 코드와 메시지로 원인을 좁힐 수 있습니다. 프록시를 찾는 중인지, 포트에 연결하는 중인지, 터널을 협상하는 중인지, 목적지를 검증하는 중인지 어느 단계에서 실패했는지 확인하세요.
모든 결과를 상태 확인 하나로 끝내지 않기
http_code만 저장하는 스크립트는 전송 오류를 버립니다. 프로세스 실행 결과와 민감한 정보를 제거한 오류 메시지도 저장하세요. 반대로 적절한 fail 옵션을 사용하지 않으면 웹사이트가 오류 상태를 반환해도 curl은 전송을 성공적으로 마칠 수 있습니다. HTTP 응답과 클라이언트 실행 결과는 서로 다른 질문에 답합니다.
TLS 검증을 끄거나 임의의 헤더를 추가해 000을 해결하려 하지 마세요. 먼저 어떤 작업이 최종 응답에 도달하지 못했는지 파악하세요.