仓酷云

标题: PHP编程:在PHP中利用curl [打印本页]

作者: 分手快乐    时间: 2015-2-3 23:41
标题: PHP编程:在PHP中利用curl
也得学会了PHP。然后再学,见异思迁是最不可取的,狗熊掰玉米就是这个道理,如果经常中途放弃,只能是一无所获,还浪费了N多的时间和经历,得不偿失,最重要的是,你会被别人瞧不起。   复制代码 代码以下:
$ch = curl_init();
$c_url = 'http://www.百度.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
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;
}
?>

其他的用户多是创立一个主动反省器,验证每一个恳求的页面是不是存在。
咱们可以用curl库来写和谷歌相似的网页蜘蛛(web spider),或是其他的网页蜘蛛。这篇文章不是关于若何写一个网页蜘蛛的,因而所以咱们没有讲任何干于网页蜘蛛的细节成绩,然而今后在PHPit 将会引见用 curl来机关一个web spider.
结论:
在这篇文章我已标明,若何利用php中的curl库和其大局部的选项。
为最根基的义务,只想取得一个网页,你能够不会需求CURL库,然而,一旦你想要做任何工作略微先辈的,您能够会想要利用curl库。
在近将来,我会告知您事实若何创立本人的收集蜘蛛,相似Google的收集蜘蛛,敬请等候,以phpit。培训的第一阶段,学习的是HTML/CSS/JavaScript基础。
作者: 只想知道    时间: 2015-2-4 06:02
我学习了一段时间后,我发现效果并不好(估计是我自身的问题)。因为一个人的精力总是有限的,同时学习这么多,会导致每个的学习时间都得不到保证。
作者: 活着的死人    时间: 2015-2-5 09:41
在我安装pear包的时候老是提示,缺少某某文件,才发现 那群extension 的排列是应该有一点的顺序,而我安装的版本的排序不是正常的排序。没办法我只好把那群冒号加了上去,只留下我需要使用的扩展。
作者: 分手快乐    时间: 2015-2-6 16:34
基础有没有对学习php没有太大区别,关键是兴趣。
作者: 莫相离    时间: 2015-2-17 07:51
说点我烦的低级错误吧,曾经有次插入mysql的时间 弄了300年结果老报错,其实mysql的时间是有限制的,大概是到203X年  具体的记不清啦,囧。
作者: 金色的骷髅    时间: 2015-2-21 21:10
说php的话,首先得提一下数组,开始的时候我是最烦数组的,总是被弄的晕头转向,不过后来呢,我觉得数组里php里最强大的存储方法,所以建议新手们要学好数组。
作者: 柔情似水    时间: 2015-3-3 16:50
不禁又想起那些说php是草根语言的人,为什么认得差距这么大呢。
作者: 第二个灵魂    时间: 2015-3-4 22:58
首先我是坚决反对新手上来就用框架的,因为对底层的东西一点都不了解,造成知识上的真空,会对以后的发展不利。我的观点上手了解下框架就好,代码还是手写。当然啦如果是位别的编程语言的高手的话,这个就另当别论啦。
作者: 因胸联盟    时间: 2015-3-7 12:20
写的比较杂,因为我也是个新手,不当至于大家多多指正。
作者: 不帅    时间: 2015-3-15 04:37
在学习的过程中不能怕麻烦,不能有懒惰的思想。学习php首先应该搭建一个lamp环境或者是wamp环境。这是学习php开发的根本。虽然网络上有很多集成的环境,安装很方便,使用起来也很稳定、
作者: 若相依    时间: 2015-3-19 17:17
因为blog这样的可以让你接触更多要学的知识,可以接触用到类,模板,js ,ajax
作者: 爱飞    时间: 2015-3-25 03:32
为了以后维护的方便最好是代码上都加上注释,“予人方便,自己方便”。此外开发文档什么的最好都弄齐全。我觉得这是程序员必备的素质。虽然会消耗点很多的时间。但是确实是非常有必要的。
作者: 冷月葬花魂    时间: 2015-3-28 22:53
如果你已经到这种程度了,那么你已经可以做我的老师了。其实php也分很多的区域,
作者: 谁可相欹    时间: 2015-4-7 13:40
先学习php和mysql,还有css(html语言很简单)我认为现在的效果比以前的方法好。
作者: 变相怪杰    时间: 2015-4-16 18:09
我还是推荐用firefox ,配上firebug 插件调试js能省下不受时间。谷歌的浏览器最好也不少用,因为谷歌的大侠们实在是太天才啦,把一些原来的js代码加了一些特效。
作者: 仓酷云    时间: 2015-4-25 02:30
当然这种网站的会员费就几十块钱。
作者: 若天明    时间: 2015-5-6 22:09
我学习了一段时间后,我发现效果并不好(估计是我自身的问题)。因为一个人的精力总是有限的,同时学习这么多,会导致每个的学习时间都得不到保证。
作者: 飘灵儿    时间: 2015-5-7 07:18
如果你可以写完像留言板这样的程序,那么你可以去一些别人的代码了,
作者: 老尸    时间: 2015-6-21 21:10
这些中手常用的知识,当你把我说的这些关键字都可以熟练运用的时候,你可以选择自己
作者: 透明    时间: 2015-6-29 08:42
本人接触php时间不长,算是phper中的小菜鸟一只吧。由于刚开始学的时候没有名师指,碰过不少疙瘩,呗很多小问题卡过很久,白白浪费不少宝贵的时间,在次分享一些子的学习的心得。




欢迎光临 仓酷云 (http://ckuyun.com/) Powered by Discuz! X3.2