首页 »PHP教程 » phpcurl:有关 CURL 的几点心得体会 »正文
phpcurl:有关 CURL 的几点心得体会
来源: 发布时间:星期一, 2009年1月12日 浏览:96次 评论:0
CURL 是 Client URL Library Functions ![](/icons/58803de.gif) 缩写 ![](/icons/58803dou.gif) 由 Daniel Stenberg 创建 ![](/icons/58803dou.gif) 更多内容可以参考他 ![](/icons/58803de.gif) 网站WebSite ![](/icons/58803dou2.gif) 最近几天突然对 HTTP 采集有了兴趣 ![](/icons/58803dou2.gif) 的前我在做这方面 ![](/icons/58803chengxu.gif) ![](/icons/58803dou.gif) ![](/icons/58803yi.gif) 般通过两种思路方法 ![](/icons/58803dou.gif) ![](/icons/58803yi.gif) 个是利用 PHP 自身 ![](/icons/58803de.gif) 文件操作 ![](/icons/58803hanshu.gif) ![](/icons/58803dou2.gif) PHP ![](/icons/58803de.gif) fopen ![](/icons/58803dou.gif) readfile 都是可以支持 http 协议 ![](/icons/58803de.gif) ![](/icons/58803dou.gif) 这样可以很方便 ![](/icons/58803de.gif) 获取互联网上 ![](/icons/58803de.gif) 内容 ![](/icons/58803dou2.gif) 另 ![](/icons/58803yi.gif) 种思路方法是通过 PHP ![](/icons/58803de.gif) Socket ![](/icons/58803hanshu.gif) ![](/icons/58803dou.gif) 这个思路方法 ![](/icons/58803de.gif) 好处是对各种协议都可以支持 ![](/icons/58803dou.gif) 缺点是使用起来比较麻烦 ![](/icons/58803dou.gif) 要对协议有 ![](/icons/58803yi.gif) 定 ![](/icons/58803de.gif) 了解 ![](/icons/58803dou2.gif) 在 HTTP 获取方面 ![](/icons/58803dou.gif) 运用 Socket ![](/icons/58803de.gif) Snoopy 类是 ![](/icons/58803yi.gif) 个非常好用 ![](/icons/58803de.gif) PHP HTTP 客户端 ![](/icons/58803dou.gif) 也是我原来最常用 ![](/icons/58803de.gif) 思路方法 ![](/icons/58803dou2.gif) 随便翻翻 PHP 手册就会发现 ![](/icons/58803dou.gif) PHP 本身可以支持 libcurl ![](/icons/58803dou2.gif) 用 C/C ![](/icons/58803jiajia.gif) 写成 ![](/icons/58803de.gif) libcurl 相比 Snoopy 更快速更可靠 ![](/icons/58803dou.gif) 而且除了 HTTP 协议外 ![](/icons/58803dou.gif) 还广泛支持其他协议( https, ftp, ladp 等等) ![](/icons/58803dou2.gif) libcurl 并不是 PHP 默认加载 ![](/icons/58803de.gif) 模块 ![](/icons/58803dou.gif) 具体如何启用可以参考 PHP 手册 ![](/icons/58803dou.gif) 这里就不多说了 ![](/icons/58803dou2.gif) PHP libcurl 使用非常简单 ![](/icons/58803dou.gif) 例如: <?php $ch = curl_init("http://www.php.net"); curl_exec($ch); curl_close($ch); ?> 3行简单 ![](/icons/58803de.gif) ![](/icons/58803chengxu.gif) 就可以完成对 http://www.php.net 页面 ![](/icons/58803de.gif) 读取并输出 ![](/icons/58803dou2.gif) 当然更多 ![](/icons/58803de.gif) 使用方法可以参考 PHP 手册 ![](/icons/58803dou2.gif) 这里只说说我在写 ![](/icons/58803chengxu.gif) 时遇到 ![](/icons/58803de.gif) ![](/icons/58803yi.gif) 个问题 ![](/icons/58803dou.gif) 例如下面 ![](/icons/58803de.gif) ![](/icons/58803chengxu.gif) : <?php $ch = curl_init ; curl_ opt($ch, CURLOPT_URL, "http://www.php.net"); //指定读取 php.net curl_ opt($ch, CURLOPT_HEADER, 1); //返回内容中包含 HTTP 头 curl_ opt($ch, CURLOPT_NOBODY, 1); //不读取页面内容 curl_exec($ch); //执行 (1) curl_ opt($ch, CURLOPT_URL, "http://www.php.net"); //指定读取 php.net curl_ opt($ch, CURLOPT_HEADER, 0); //返回内容中不包含 HTTP 头 curl_ opt($ch, CURLOPT_NOBODY, 0); //读取页面内容 curl_exec($ch); //执行 (2) curl_close($ch); ?> 按照我 ![](/icons/58803de.gif) 想法 ![](/icons/58803dou.gif) ![](/icons/58803chengxu.gif) 应该可以分别返回 HTTP 响应报头和页面 ![](/icons/58803de.gif) 内容 ![](/icons/58803dou2.gif) 可是上面这段 ![](/icons/58803chengxu.gif) 执行结果为:(1)处正常返回 HTTP 响应报头 ![](/icons/58803dou.gif) (2)不会返回任何内容 ![](/icons/58803dou2.gif) 查了很多资料都没有提到这个问题 ![](/icons/58803dou2.gif) 最终无奈 ![](/icons/58803dou.gif) 只好在读取(2)的前重新执行 curl_init ![](/icons/58803kh.gif) ![](/icons/58803dou.gif) 即将上 ![](/icons/58803chengxu.gif) 改成这样: <?php $ch = curl_init ; curl_ opt($ch, CURLOPT_URL, "http://www.php.net"); //指定读取 php.net curl_ opt($ch, CURLOPT_HEADER, 1); //返回内容中包含 HTTP 头 curl_ opt($ch, CURLOPT_NOBODY, 1); //不读取页面内容 curl_exec($ch); //执行 (1) curl_close($ch); $ch = curl_init ; curl_ opt($ch, CURLOPT_URL, "http://www.php.net"); //指定读取 php.net curl_ opt($ch, CURLOPT_HEADER, 0); //返回内容中不包含 HTTP 头 curl_ opt($ch, CURLOPT_NOBODY, 0); //读取页面内容 curl_exec($ch); //执行 (2) curl_close($ch); ?> 返回结果正常 ![](/icons/58803dou2.gif) 虽然可以通过这种思路方法解决问题 ![](/icons/58803dou.gif) 但对这个现象我感觉非常 ![](/icons/58803de.gif) 奇怪 ![](/icons/58803dou2.gif) 是 libcurl 本身 ![](/icons/58803de.gif) 问题 ![](/icons/58803dou.gif) 还是我使用 ![](/icons/58803de.gif) 思路方法不当呢?还希望熟悉 curl ![](/icons/58803de.gif) 朋友帮忙指正 ![](/icons/58803yi.gif) 下
相关文章
读者评论
发表评论
|
|