$ch = curl_init(); $c_url = 'http://www.baidu.com'; $c_url_data = "product_&type=".$type.""; curl_setopt($ch, CURLOPT_URL,$c_url); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_POSTFIELDS, $c_url_data); echo $result = curl_exec($ch); curl_close ($ch); unset($ch);
이 글에서는 주로 php_curl 라이브러리에 대한 지식을 설명하고, php_curl을 더 잘 활용하는 방법을 알려드립니다.
소개
PHP 스크립트 코드를 작성할 때 다음 문제가 발생할 수 있습니다. 다른 사이트에서 콘텐츠를 가져오는 방법은 무엇입니까? 여기에는 여러 가지 해결 방법이 있습니다. 가장 간단한 방법은 PHP에서 fopen() 함수를 사용하는 것입니다. 그러나 "웹 크롤러"를 구축하고 클라이언트 설명을 정의하려는 경우와 같이 fopen 함수에는 사용할 매개변수가 충분하지 않습니다. 크롤러(IE, firefox)에서는 POST, GET 등과 같은 다양한 요청 방법을 통해 콘텐츠를 얻습니다. 이러한 요구 사항은 fopen() 함수로는 달성할 수 없습니다.
위에서 제기한 문제를 해결하기 위해 PHP 확장 라이브러리인 Curl을 사용할 수 있습니다. 이 확장 라이브러리는 일반적으로 다른 사이트의 콘텐츠를 얻거나 다른 작업을 수행하는 데 사용할 수 있습니다. 것들.
참고: 이 두 코드에는 php_curl 확장 라이브러리의 지원이 필요합니다. phpinfo()를 확인하세요. 컬 지원이 활성화되어 있으면 컬 라이브러리가 지원된다는 의미입니다.
1. Windows에서 PHP에 대한 컬 라이브러리 지원을 활성화합니다.
php.ini를 열고 Extension=php_curl.dll 앞에 있는 ; 기호를 제거합니다.
2. Linux에서 PHP용 컬 라이브러리 지원 활성화:
PHP를 컴파일할 때 ./configure 뒤에 –with-curl을 추가하세요.
이 글에서는 컬 라이브러리를 사용하는 방법을 살펴보겠습니다. 다른 용도도 살펴보세요. 다음으로 가장 기본적인 사용법부터 시작해야 합니다.
기본 사용법:
첫 번째 단계에서는 함수 cur_init()를 통해 새로운 컬 세션을 생성합니다. 코드는 다음과 같습니다. :
<?php // create a new curl resource $ch = curl_init(); ?>
URL의 내용을 가져와야 하는 경우 다음 단계는 URL을 컬_setopt() 함수에 전달하는 것입니다. 코드는 다음과 같습니다.
<?php // set URL and other appropriate options curl_setopt($ch, CURLOPT_URL, “http://www.google.com/”); ?>
이전 단계를 완료하면 컬 준비 작업이 완료됩니다. 컬은 URL 사이트의 내용을 가져와서 인쇄합니다. 코드:
<?php // grab URL and pass it to the browser curl_exec($ch); ?>
마지막으로 현재 컬 세션을 닫습니다.
<?php //close curl resource, and free up system resources curl_close($ch); ?>
완성된 예제 코드를 살펴보겠습니다.
// create a new curl resource $ch = curl_init(); // set URL and other appropriate options curl_setopt($ch, CURLOPT_URL, “http://www.google.nl/”); // grab URL and pass it to the browser curl_exec($ch); // close curl resource, and free up system resources curl_close($ch); ?>
방금 다른 사이트의 콘텐츠를 얻어서 자동으로 브라우저에 출력했습니다. 얻은 정보를 정리하고 출력되는 콘텐츠를 제어할 수 있는 다른 방법이 있나요? 전혀 문제가 없습니다. 컬_세톱트() 함수의 매개변수에서 내용을 가져오고 싶지만 출력하지 않으려면 CURLOPT_RETURNTRANSFER 매개변수를 사용하고 전체 코드에 대해 0이 아닌 값으로 설정하세요. , 다음을 참조하세요.
// create a new curl resource $ch = curl_init(); // set URL and other appropriate options curl_setopt($ch, CURLOPT_URL, “http://www.google.nl/”); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); // grab URL, and return output $output = curl_exec($ch); // close curl resource, and free up system resources curl_close($ch); // Replace ‘Google' with ‘PHPit' $output = str_replace('Google', ‘PHPit', $output); // Print output echo $output; ?>
위의 두 예에서, 컬_setopt() 함수의 다른 매개변수를 설정하면 컬이 강력한 이유를 알 수 있습니다. 이 매개변수의 의미를 살펴보세요.
CURL 관련 옵션:
PHP 매뉴얼에서 컬_setopt() 함수를 읽어보면 그 아래에 긴 매개변수 목록이 있다는 것을 알 수 있는데, 이를 하나씩 소개하는 것은 불가능합니다. 자세한 내용은 PHP 매뉴얼을 확인하세요. 여기서는 일반적으로 사용되는 일부 매개변수만 소개합니다.
첫 번째 흥미로운 매개변수는 CURLOPT_FOLLOWLOCATION입니다. 이 매개변수를 true로 설정하면 컬은 리디렉션 명령을 기반으로 더 깊은 리디렉션 경로를 얻습니다. 예를 들어 PHP 페이지를 얻으려고 하면 점프 코드가 있습니다. 이 PHP 페이지와 컬은 점프 코드를 반환하는 대신 http://new_url에서 콘텐츠를 가져옵니다. 전체 코드는 다음과 같습니다.
// create a new curl resource $ch = curl_init(); // set URL and other appropriate options curl_setopt($ch, CURLOPT_URL, “http://www.google.com/”); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); // grab URL, and print curl_exec($ch); ?>
Google에서 리디렉션 요청을 보내면 위의 예에서는 리디렉션된 URL을 기반으로 콘텐츠를 계속 가져옵니다. 이 매개변수와 관련된 두 가지 옵션은 CURLOPT_MAXREDIRS 및 CURLOPT_AUTOREFERER입니다. 🎜> CURLOPT_MAXREDIRS 옵션 매개변수를 사용하면 최대 점프 요청 수를 정의할 수 있으며, 그 이후에는 콘텐츠를 더 이상 얻을 수 없습니다. CURLOPT_AUTOREFERER가 true로 설정되면 컬은 자동으로 각 점프 링크에 Referer 헤더를 추가합니다. 그다지 중요하지는 않지만 특정 경우에는 매우 유용합니다.
다음으로 도입된 매개변수는 CURLOPT_POST입니다. 이 기능을 사용하면 GET 요청 대신 POST 요청을 수행할 수 있으므로 매우 유용한 기능입니다. 이는 기본적으로
페이지의 다른 형식을 제출할 수 있음을 의미합니다. 양식을 작성하세요. 아래 예는 제가 의미하는 바를 보여줍니다.
// create a new curl resource $ch = curl_init(); // set URL and other appropriate options curl_setopt($ch, CURLOPT_URL,”http://projects/phpit/content/using%20curl%20php/demos/handle_form.php”); // Do a POST $data = array('name' => ‘Dennis', 'surname' => ‘Pallett'); curl_setopt($ch, CURLOPT_POST, true); curl_setopt($ch, CURLOPT_POSTFIELDS, $data); // grab URL, and print curl_exec($ch); ?> And the handle_form.php file: echo ‘Form variables I received:'; echo ‘'; print_r ($_POST); echo ‘'; ?>
CURLOPT_CONNECTTIMEOUT 매개변수는 일반적으로 컬이 링크를 요청하는 시간을 설정하는 데 사용됩니다. 이는 매우 중요한 옵션입니다. 이 시간을 너무 짧게 설정하면 컬 요청이 실패할 수 있습니다.
그러나 너무 오래 설정하면 PHP 스크립트가 죽을 수도 있습니다. 이 파라미터와 관련된 옵션은 CURLOPT_TIMEOUT으로, 컬의 실행을 허용하는 데 필요한 시간을 설정하는 데 사용됩니다. 아주 작은 값으로 설정하면 다운로드하는 데 시간이 걸리기 때문에 다운로드한 페이지가 불완전해질 수 있습니다.
마지막 옵션은 CURLOPT_USERAGENT로, webspilder 또는 IE6.0과 같은 요청의 클라이언트 이름을 사용자 정의할 수 있습니다. 샘플 코드는 다음과 같습니다.
// create a new curl resource $ch = curl_init(); // set URL and other appropriate options curl_setopt($ch, CURLOPT_URL, “http://sc.jb51.net/”); curl_setopt($ch, CURLOPT_USERAGENT, ‘My custom web spider/0.1′); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); // grab URL, and print curl_exec($ch); ?>
现在我们把最有意思的一个参数都介绍过了,下面我们来介绍一个curl_getinfo() 函数,看看它能为我们做些什么。
获取页面的信息:
函数curl_getinfo()可以使得我们获取接受页面各种信息,你能编辑这些信息通过设定选项的第二个参数,你也可以传递一个数组的形式。就像下面的例子:
// create a new curl resource $ch = curl_init(); // set URL and other appropriate options curl_setopt($ch, CURLOPT_URL, “http://www.google.com”); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_FILETIME, true); // grab URL $output = curl_exec($ch); // Print info echo ‘'; print_r (curl_getinfo($ch)); echo ‘'; ?>
大部分返回的信息是请求本身的,像:这个请求花的时间,返回的头文件信息,当然也有一些页面的信息,像页面内容的大小,最后修改的时间。
那些全是关于curl_getinfo()函数的,现在让我们看看它的实际用途。
实际用途:
curl库的第一用途可以查看一个URL页面是否存在,我们可以通过查看这个URL的请求返回的代码来判断比如404代表这个页面不存在,我们来看一些例子:
// create a new curl resource $ch = curl_init(); // set URL and other appropriate options curl_setopt($ch, CURLOPT_URL, “http://www.google.com/does/not/exist”); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); // grab URL $output = curl_exec($ch); // Get response code $response_code = curl_getinfo($ch, CURLINFO_HTTP_CODE); // Not found? if ($response_code == ‘404′) { echo ‘Page doesn\'t exist'; } else { echo $output; } ?>
其他的用户可能是创建一个自动检查器,验证每个请求的页面是否存在。
我们可以用curl库来写和google类似的网页蜘蛛(web spider),或是其他的网页蜘蛛。这篇文章不是关于如何写一个网页蜘蛛的,因此所以我们没有讲任何关于网页蜘蛛的细节问题,但是以后在PHPit 将会介绍用 curl来构造一个web spider.
结论:
在这篇文章我已经表明,如何使用php中的curl库和其大部分的选项。
为最基本的任务,只想获得一个网页,你可能不会需要CURL库,但是,一旦你想要做任何事情稍微先进的,您可能会想要使用curl库。
在近未来,我会告诉您究竟如何建立自己的网络蜘蛛,类似Google的网络蜘蛛,敬请期待,以phpit。
更多在PHP中使用curl_init函数的说明相关文章请关注PHP中文网!