PHP의 get_headers() 는 세 번째 인수로 스트림 컨텍스트를 받습니다. PHP 8에서는 HTTP URL에 대한 헤더 확인이 자체 프록시 구성을 가질 수 있습니다:

$context = stream_context_create([
    'http' => [
        'proxy' => 'tcp://proxy.example.net:8080',
        'request_fulluri' => true,
        'method' => 'HEAD',
        'follow_location' => 0,
        'timeout' => 10,
    ],
]);

$headers = get_headers('http://example.net/file.zip', false, $context);
if ($headers === false) {
    throw new RuntimeException('Header request failed');
}

프록시는 HTTP 스트림 래퍼의 TCP 엔드포인트입니다. 이 공개 HTTP 확인에서는 자리 표시자 호스트와 포트를 HTTP 프록시 목록의 인증 없는 후보로 바꾸세요. request_fulluri 는 많은 전달 프록시가 기대하는 대로 HTTP 요청 줄에 전체 대상 URI를 제공합니다. 이 컨텍스트는 이 호출에 속하며 다른 URL 읽기가 사용하는 기본 컨텍스트를 바꾸지 않습니다.

함수 이름과 달리 기본 요청 메서드는 GET입니다. 명시적 HEAD 메서드는 해당 응답 본문 없이 응답 메타데이터를 서버에 요청합니다. 서버가 HEAD를 거부하거나 다르게 처리할 수 있으므로, 헤더 확인 성공이 이후 다운로드의 성공을 보장하지는 않습니다.

여기서는 첫 응답을 살펴보기 위해 리디렉션 추적을 껐습니다. 그러면 Location 헤더와 리디렉션 상태는 다른 URL을 가져오라는 지시가 아니라 유용한 결과가 됩니다. 확인이 리디렉션을 따라야 한다면 그 정책을 의도적으로 바꾸고 추가 응답 헤더를 고려하세요.

false 인수는 인덱스된 헤더 배열을 유지합니다. 연관 파싱이 더 유용할 때는 true 를 사용하세요.

관련 글