您好,欢迎访问一九零五行业门户网

基于PHP的cURL快速入门三

基于php的curl快速入门3
下面的代码有点复杂了,因此我将一小步一小步地详细解释:
以下为引用的内容:
// 1. 批处理器$mh = curl_multi_init();// 2. 加入需批量处理的urlfor ($i = 0; $i ?
下面解释一下以上代码。列表的序号对应着代码注释中的顺序数字。
新建一个批处理器。created a multi handle.
稍后我们将创建一个把url加入批处理器的函数 add_url_to_multi_handle() 。每当这个函数被调用,就有一个新url被加入批处理器。一开始,我们给批处理器添加了10个url(这一数字由 $max_connections 所决定)。
运行 curl_multi_exec() 进行初始化工作是必须的,只要它返回 curlm_call_multi_perform 就还有事情要做。这么做主要是为了创建连接,它不会等待完整的url响应。
只要批处理中还有活动连接主循环就会一直持续。
curl_multi_select() 会一直等待,直到某个url查询产生活动连接。
curl的活儿又来了,主要是获取响应数据。
检查各种信息。当一个url请求完成时,会返回一个数组。
在返回的数组中有一个 curl 句柄。我们利用其获取单个curl请求的相应信息。
如果这是一个死链或者请求超时,不会返回http状态码。
如果这个页面找不到了,会返回404状态码。
其他情况我们都认为这个链接是可用的(当然,你也可以再检查一下500错误之类...)。
从该批次移除这个curl句柄,因为它已经没有利用价值了,关了它!
很好,现在可以另外加一个url进来了。再一次地,初始化工作又开始进行...
嗯,该干的都干了。关闭批处理器,生成报告。
回过头来看给批处理器添加新url的函数。这个函数每调用一次,静态变量 $index 就递增一次,这样我们才能知道还剩多少url没处理。
我把这个脚本在我的博客上跑了一遍(测试需要,有一些错误链接是故意加上的),结果如下:
以下为引用的内容:

?
共检查约40个url,只耗费两秒不到。当需要检查更加大量的url时,其省心省力的效果可想而知!如果你同时打开10个连接,还能再快上10倍!另外,你还可以利用curl批处理的无隔断特性来处理大量url请求,而不会阻塞你的web脚本。
?
另一些有用的curl 选项
http 认证
如果某个url请求需要基于 http 的身份验证,你可以使用下面的代码:
复制内容到剪贴板代码:
以下为引用的内容:
$url = http://www.somesite.com/members/;$ch = curl_init();curl_setopt($ch, curlopt_url, $url);curl_setopt($ch, curlopt_returntransfer, 1);// 发送用户名和密码curl_setopt($ch, curlopt_userpwd, myusername:mypassword);// 你可以允许其重定向curl_setopt($ch, curlopt_followlocation, 1);// 下面的选项让 curl 在重定向后// 也能发送用户名和密码curl_setopt($ch, curlopt_unrestricted_auth, 1);$output = curl_exec($ch);curl_close($ch);
?
ftp 上传
php 自带有 ftp 类库, 但你也能用 curl:
以下为引用的内容:
// 开一个文件指针$file = fopen(/path/to/file, r);// url里包含了大部分所需信息$url = ftp://username:password@mydomain.com:21/path/to/new/file;$ch = curl_init();curl_setopt($ch, curlopt_url, $url);curl_setopt($ch, curlopt_returntransfer, 1);// 上传相关的选项curl_setopt($ch, curlopt_upload, 1);curl_setopt($ch, curlopt_infile, $fp);curl_setopt($ch, curlopt_infilesize, filesize(/path/to/file));// 是否开启ascii模式 (上传文本文件时有用)curl_setopt($ch, curlopt_ftpascii, 1);$output = curl_exec($ch);curl_close($ch);
?
fan墙术
你可以用代理发起curl请求:
以下为引用的内容:
$ch = curl_init();curl_setopt($ch, curlopt_url,'http://www.example.com');curl_setopt($ch, curlopt_returntransfer, 1);// 指定代理地址curl_setopt($ch, curlopt_proxy, '11.11.11.11:8080');// 如果需要的话,提供用户名和密码curl_setopt($ch, curlopt_proxyuserpwd,'user:pass');$output = curl_exec($ch);curl_close ($ch);
?
回调函数
可以在一个url请求过程中,让curl调用某指定的回调函数。例如,在内容或者响应下载的过程中立刻开始利用数据,而不用等到完全下载完。
以下为引用的内容:
$ch = curl_init();curl_setopt($ch, curlopt_url,'http://net.tutsplus.com');curl_setopt($ch, curlopt_writefunction,progress_function);curl_exec($ch);curl_close ($ch);function progress_function($ch,$str) {echo $str;return strlen($str);}
?
这个回调函数必须返回字串的长度,不然此功能将无法正常使用。
在url响应接收的过程中,只要收到一个数据包,这个函数就会被调用。
小结
今天我们一起学习了curl库的强大功能和灵活的扩展性。希望你喜欢。下一次要发起url请求时,考虑下curl吧!
原文:基于php的curl快速入门
英文原文:http://net.tutsplus.com/tutorial%20...%20for-mastering-curl/
原文作者:burak guzel
本文链接:http://www.blueidea.com/tech/program/2010/7348.asp
其它类似信息

推荐信息