在PHP中利用Curl
Posted 09月 14th, 2008 归属于PHP
原文(英文)地址: http://www.phpit.net/article/using-curl-php 版权声明:签名-非贸易性利用-制止归纳 2.0
摘要:
在这篇文章中次要解说php_curl库的常识,并教你若何更好的利用php_curl。
简介
你能够在你的编写PHP剧本代码中会碰到如许的成绩:怎样才干从其他站点获得内容呢?这里有几个处理体例;最复杂的就是在php中利用fopen()函数,然而fopen函数没有足够的参数来利用,好比当你想构建一个“收集爬虫”,想界说爬虫的客户端描写(IE,firefox),经由过程分歧的恳求体例来获得内容,好比POST,GET;等等这些需求是不成能用fopen()函数完成的。
为懂得决咱们下面提出的成绩,咱们可使用PHP的扩大库-Curl,这个扩大库凡是是默许在装置包中的,你可以它来获得其他站点的内容,也能够来干其余。
备注:这两段代码需求php_curl扩大库的撑持,检查phpinfo(),假如curl support enabled则暗示撑持curl库。
1、Windows下的PHP开启curl库撑持:
翻开php.ini,将extension=php_curl.dll前的;号去失落。
2、Linux下的PHP开启curl库撑持:
编译PHP时在./configure后加上 Cwith-curl
在这篇文章中,咱们一同来看看若何利用curl库,并看看它的其他用途,然而接上去,咱们要从最根基的用法入手下手
根基用法:
第一步,咱们经由过程函数curl_init()创立一个新的curl会话,代码以下:
// create a new curl resource
$ch = curl_init();
?>
咱们已胜利创立了一个curl会话,假如需求获得一个URL的内容,那末接下的一步,传递一个URL给curl_setopt()函数,代码:
// set URL and other appropriate options
curl_setopt($ch, CURLOPT_URL, “http://www.谷歌.com/”);
?>
做完上一步任务,curl的筹办任务做完了,curl将会获得URL站点的内容,并打印出来。代码:
// grab URL and pass it to the browser
curl_exec($ch);
?>
最初,封闭以后的curl会话
//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.谷歌.nl/”);
// grab URL and pass it to the browser
curl_exec($ch);
// close curl resource, and free up system resources
curl_close($ch);
?>
咱们方才把别的一个站点的内容,获得过去今后主动输入到阅读器,咱们有无其他的体例组织获得的信息,然后掌握其输入的内容呢?完整没有成绩,在curl_setopt()函数的参数中,假如但愿取得内容但不输入,利用 CURLOPT_RETURNTRANSFER参数,并设为非0值/true!,完全代码请看: 复制代码 代码以下:
// create a new curl resource
$ch = curl_init();
// set URL and other appropriate options
curl_setopt($ch, CURLOPT_URL, “http://www.谷歌.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);
// WordStr ‘Google' with ‘PHPit'
$output = str_replace('Google', ‘PHPit', $output);
// Print output
echo $output;
?>
在下面的2个实例中,你能够注重到经由过程设置函数curl_setopt()的分歧参数,可以取得分歧了局,这恰是curl壮大的缘由,上面咱们来看看这些参数的寄义。
CURL的相干选项:
假如你看过php手册中的curl_setopt()函数,你可以注重到了,它上面长长的参数列表,咱们不成能逐一引见,更多的内容请检查PHP手册,这里只引见经常使用的和有的一些参数。
第一个很成心思的参数是 CURLOPT_FOLLOWLOCATION ,当你把这个参数设置为true时,curl会依据任何重定向号令更深条理的获得转向途径,举个例子:当你测验考试获得一个PHP的页面,然后这个PHP的页面中有一段跳转代码 ,curl将从http://new_url获得内容,而不是前往跳转代码。完全的代码以下: 复制代码 代码以下:
// create a new curl resource
$ch = curl_init();
// set URL and other appropriate options
curl_setopt($ch, CURLOPT_URL, “http://www.谷歌.com/”);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
// grab URL, and print
curl_exec($ch);
?>
假如Google发送一个转向恳求,下面的例子将依据跳转的网址持续获得内容,和这个参数有关的两个选项是CURLOPT_MAXREDIRS和CURLOPT_AUTOREFERER .
参数CURLOPT_MAXREDIRS选项答应你界说跳转恳求的最大次数,超越了这个次数将不再获得其内容。假如CURLOPT_AUTOREFERER 设置为true时,curl会主动添加Referer header在每个跳转链接,能够它不是很主要,然而在必定的案例中却十分的有效。
下一步引见的参数是CURLOPT_POST,这是一个十分有效的功效,由于它可让您如许做POST恳求,而不是GET恳求,这实践上意味着你可以提交
其他模式的页面,不必其其实表单中填入。上面的例子标明我的意思: 复制代码 代码以下:
// 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 凡是用来设置curl测验考试恳求链接的工夫,这是一个十分主要的选项,假如你把这段工夫设置的太短了,能够会招致curl恳求掉败。
然而假如你把它设置的工夫太长了,能够PHP剧本将逝世失落。和这个参数相干的一个选项是 CURLOPT_TIMEOUT,这是用来设置curl答应履行的工夫需求。假如您设置这一个很小的值,它能够会导下载的网页上是不完全的,由于他们需求一段工夫才干下载。
最初一个选项是 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.谷歌.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.谷歌.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;
}
?>