wget 소개
wget은 URL 만으로 웹 상의 콘텐츠를 가져올 수 있는 간편한 리눅스 명령어입니다. 대부분의 리눅스 버전에는 wget 명령어도 기본으로 포함되어 있으나, 그렇지 않더라도 새로 설치하는 것은 어렵지 않을 것입니다. PHP에는 쉘 스크립트를 실행하는 실행 연산자 backtics(` `)가 있기 때문에, wget 명령어 역시 PHP 스크립트 상에서 실행이 가능합니다.
wget 명령어로 작성된 HTTP 통신 함수
아래는 1편과 2편에서 작성한 getFromUrl() 함수와 동일한 기능, 동일한 인자를 가진 함수를 wget 명령어로 구현한 것입니다. 이전의 2개 글에서 소개한 함수와는 비교할 수 없을 정도로 코드가 간결합니다. POST 메소드일 경우, URL 뒤에 입력받은 인자를 별도로 분리한다는 것 외에는 눈에 띄게 복잡한 과정도 없습니다.
function getFromUrl($url, $method = 'GET') { $postData = ''; switch(strtoupper($method)) { case 'GET': break; case 'POST': $info = parse_url($url); $url = $info['scheme'] . '://' . $info['host'] . $info['path']; $postData = '--post-data="' . $info['query'] . '" '; break; default: return false; } return `wget -qO- $postData "$url"`; }
이번 함수는 wget 명령어 한 줄만 잘 작성하면 여타의 모든 과정은 명령어가 알아서 해줍니다. 따라서 우리는 명령어의 파라메터만 잘 지정해주면 됩니다. 이 함수에서는 wget 명령어에 2가지의 파라메터를 사용하였습니다.
첫 번째는 -qO-라는 파라메터인데, wget이 웹상에서 가져온 콘텐츠를 Standard Output에 출력하도록 하는 기능을 합니다. wget은 별도 파라메터 없이 실행할 경우, 웹상에서 가져온 콘텐츠를 파일로 저장합니다. 우리는 해당 콘텐츠를 문자열로 가져오기를 원하므로, 굳이 불필요한 파일을 만들 필요는 없을 것입니다.
두 번째는 –post-data라는 파라메터인데, 이름 그대로 POST 메소드로 HTTP 통신을 하고 싶을 때는 이 파라메터 안에 name=value&name=value 형태로 POST 인자들을 입력하면 됩니다. GET 메소드일 경우에는 인자들이 포함된 URL을 그대로 사용하면 됩니다.