[PHP] Proxy 서버를 이용해서 원격 웹서버 내용 갖고 오기

이씨플라자는 중문으로 서비스되는 이씨플라자 중문 사이트가 따로 있고, 대부분의 사용자는 중국업체들이다. 서버는 현재 국내 KTNET IDC에 있다. 요즘 알 수 없는 이유(?)로 중국에서 이씨플라자 중문 사이트에 접속하는데 장애가 많이 발생해서, 이를 탐지하는 프로그램을 만들어야만 했다. 중국사용자 환경에서 접속을 테스트해야 하니깐 중국내 공개된 proxy 서버를 이용하기로 했다.

전에 올린 “MSXML2.ServerXMLHTTP 사용하여 원격 웹서버 내용 갖고 오기” 포스트에서 사용한 MSXML2.ServerXMLHTTP 컴포넌트를 사용하려고 했는데 허걱.. 이 컴포넌트는 Proxy 서버를 지정할 수 있는 방법을 제공하지 않는 것이다. 별 수 없이 막강한 함수를 갖고 있는 php를 좀 뒤져봤다. 역시 여기에는 해결책이 있었다.

Proxy 서버를 이용해서 http 통신을 하는 get_contents 라는 함수를 하나 만들어서 사용했다. 혹시나 Proxy 서버를 사용할 필요가 있으신 분들은 참고하시기를.

function get_contents($url, $proxy = "") {
    //이 부분은 반드시 필요하지는 않지만,
    //User-Agent를 체크하는 사이트가 있다면 필요함.
    $header = "User-Agent: Mozilla/4.0+(compatible;+MSIE+6.0;+Windows+NT+5.1;+SV1;)";

    if (empty($proxy)) {
        // proxy를 사용하지 않음
        $opts = array(
            'http' => array(
                'request_fulluri' => true,
                'header' => $header
            ),
        );
    } else {
        // proxy를 사용함
        $opts = array(
            'http' => array(
                'proxy' => 'tcp://'.$proxy,
                'request_fulluri' => true,
                'header' => $header
            ),
        );
    }

    $context = stream_context_create($opts);
    $html = file_get_contents($url, false, $context);
    $html;
}

Leave a Reply

Your email address will not be published. Required fields are marked *