PHP cURL 애플리케이션에서 “프록시를 가져온다”는 말은 세 가지 다른 뜻일 수 있습니다. 다른 요청을 추가하기 전에 어떤 관측이 필요한지 정하십시오.

질문어디를 볼지
애플리케이션이 어떤 엔드포인트를 설정했나?핸들에 넘긴 설정
이 전송에 프록시가 사용되었나?지원되는 경우의 전송 정보
웹사이트가 어떤 공개 주소를 보았나?그 목적지에서의 관측

선택한 엔드포인트를 핸들이나 요청 객체와 함께 보관하십시오. curl_getinfo 는 전송 정보 인터페이스이며, 앞서 지정한 모든 CURLOPT 값에 대한 범용 게터가 아닙니다. curl_setopt 호출을 가로채려는 것보다 애플리케이션 설정을 보관하는 편이 간단합니다.

완료된 전송을 살펴보기

전송 후 연결된 피어는 CURLINFO_PRIMARY_IP 로 확인할 수 있습니다. 첫 연결이 프록시로 향하면 그 피어는 웹사이트 주소가 아니라 프록시 주소일 수 있습니다.

$peer = curl_getinfo($ch, CURLINFO_PRIMARY_IP);
$usedProxy = defined('CURLINFO_USED_PROXY')
    ? curl_getinfo($ch, constant('CURLINFO_USED_PROXY'))
    : null;

CURLINFO_USED_PROXY 는 8.7.0 에서 libcurl 에 추가되었고 호환되는 PHP 빌드에서 제공됩니다. 그 결과는 프록시 사용 여부를 알려 주며 선택한 프록시의 전체 URL 은 아닙니다. 상수를 쓸 수 없다면 위의 null 은 관측을 얻을 수 없다는 뜻이지 요청이 직접 나갔다는 뜻은 아닙니다.

핸들이 아직 해당 작업을 설명하고 있을 때 이 값들을 읽으십시오. 실패한 연결은 쓸모 있는 피어 주소를 주지 않을 수 있고, 명시적 프록시도 적용되는 예외로 우회될 수 있습니다.

IP 확인 엔드포인트가 세 번째 질문에 답합니다. 그 응답은 프록시 뒤의 출구를 설명할 수 있지만 설정된 호스트 이름은 다른 입구로 해석됩니다. 애플리케이션 설정에서 한 주소를 다른 주소로 대체해서는 안 됩니다.

관련 글