`
icrwen
  • 浏览: 263253 次
  • 性别: Icon_minigender_2
  • 来自: 济南
社区版块
存档分类
最新评论

php curl的几点心得

    博客分类:
  • php
阅读更多
CURL 是 Client URL Library Functions 的缩写,由 Daniel Stenberg 创建,更多内容可以参考他的网站。最近几天突然对 HTTP 采集有了兴趣。之前我在做这方面程序,一般通过两种方法,一个是利用 PHP 自身的文件操作函数。PHP 的 fopen,readfile 都是可以支持 http 协议的,这样可以很方便的获取互联网上的内容。另一种方法是通过 PHP 的 Socket 函数,这个方法的好处是对各种协议都可以支持,缺点是使用起来比较麻烦,要对协议有一定的了解。在 HTTP 获取方面,运用 Socket 的 Snoopy 类是一个非常好用的 PHP HTTP 客户端,也是我原来最常用的方法。

随便翻翻 PHP 手册就会发现,PHP 本身可以支持 libcurl。用 C/C++ 写成的 libcurl 相比 Snoopy 更快速更可靠,而且除了 HTTP 协议外,还广泛支持其他协议( https, ftp, ladp 等等)。libcurl 并不是 PHP 默认加载的模块,具体如何启用可以参考 PHP 手册,这里就不多说了。PHP libcurl 使用非常简单,例如:

<?php
    $ch = curl_init("http://www.php.net");
    curl_exec($ch);
    curl_close($ch);
?>
三行简单的程序就可以完成对 http://www.php.net 页面的读取并输出。当然更多的用法可以参考 PHP 手册。这里只说说我在写程序时遇到的一个问题,例如下面的程序:

<?php
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, "http://www.php.net");    //指定读取 php.net
    curl_setopt($ch, CURLOPT_HEADER, 1);            //返回内容中包含 HTTP 头
    curl_setopt($ch, CURLOPT_NOBODY, 1);            //不读取页面内容
    curl_exec($ch);                        //执行 (1)
    curl_setopt($ch, CURLOPT_URL, "http://www.php.net");    //指定读取 php.net
    curl_setopt($ch, CURLOPT_HEADER, 0);            //返回内容中不包含 HTTP 头
    curl_setopt($ch, CURLOPT_NOBODY, 0);            //读取页面内容
    curl_exec($ch);                        //执行 (2)
    curl_close($ch);
?>
按照我的想法,程序应该可以分别返回 HTTP 响应报头和页面的内容。可是上面这段程序执行结果为:(1)处正常返回 HTTP 响应报头,(2)不会返回任何内容。查了很多资料都没有提到这个问题。最终无奈,只好在读取(2)之前重新执行 curl_init(),即将上程序改成这样:

<?php
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, "http://www.php.net");    //指定读取 php.net
    curl_setopt($ch, CURLOPT_HEADER, 1);            //返回内容中包含 HTTP 头
    curl_setopt($ch, CURLOPT_NOBODY, 1);            //不读取页面内容
    curl_exec($ch);                        //执行 (1)
    curl_close($ch);
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, "http://www.php.net");    //指定读取 php.net
    curl_setopt($ch, CURLOPT_HEADER, 0);            //返回内容中不包含 HTTP 头
    curl_setopt($ch, CURLOPT_NOBODY, 0);            //读取页面内容
    curl_exec($ch);                        //执行 (2)
    curl_close($ch);
?>
返回结果正常。虽然可以通过这种方法解决问题,但对这个现象我感觉非常的奇怪。是 libcurl 本身的问题,还是我使用的方法不当呢?还希望熟悉 curl 的朋友帮忙指正一下。
分享到:
评论

相关推荐

    php_curl-5.3.13-VC9-x64.zip(php curl模块)

    用来替换WAMP server下的php_curl.dll,解决加载curl报错或无法加载问题。下载解压后,覆盖wamp\bin\php\php5.4.3\ext目录下对应文件,重启apache即可。如果不行请检查: 是否已修改php.ini文件去掉extension=...

    php扩展 php_curl

    php扩展 php_curl 其中包括libeay32.dll,php_curl.dll和ssleay32.dll是开启php_curl的必备条件

    php的Curl处理类

    使用函数之前我们要需要把php curl模块打开(libeay32.dll, ssleay32.dll, php5ts.dll, php_curl.dll) 开启php curl函数库的步骤 1).去掉windows/php.ini 文件里;extension=php_curl.dll前面的; /*用 echo phpinfo...

    php CURL 命令详解

    curl命令详解php CURL 命令详解php CURL 命令详解php CURL 命令详解php CURL 命令详解php CURL 命令详解php CURL 命令详解php CURL 命令详解php CURL 命令详解php CURL 命令详解php CURL 命令详解php CURL 命令详解...

    PHP实现通过CURL上传文件功能示例

    本文实例讲述了PHP实现通过CURL上传文件功能。分享给大家供大家参考,具体如下: PHP使用CURL上传文件只需发送一个POST请求就可以了,在请求中设置某个字段为需要上传的文件全路径,并且以”@”开头,然后使用CURL把...

    php curl模仿form表单提交图片或文件

    php curl模仿form表单提交图片或文件 用的tp5做的例子

    php curl 长连接的实现

    php curl中长连接实现,对于同一个域名和端口的访问,可以做到在同一个进程中复用同一个连接,特别是对于经常内网访问的地址,性能提升很大!

    php curl 详解

    php curl 详解 php curl 详解 php curl 详解 php curl 详解

    CentOs下安装PHP扩展 curl

    CentOs下安装PHP扩展 curl 务器运行一段时间后,可能突然会需求添加某个扩展,如curl、pdo、xmlrpc等,这就需要在不重新编译Linux PHP的情况下独立添加扩展。

    PHP封装CURL扩展类

    主要介绍了PHP封装CURL扩展类,实例分析了基于curl发送post、get请求及操作cookie等相关技巧 编码规范 * @class 类名首字母大写,类名为多个单词, 每个大字首字母大写 eg: class Curl , class CurlPage * @variable...

    php curl 报错 php 导入整数 cacert.pem

    php curl 报错 php 导入整数 cacert.pem

    PHP后端curl进度条_becomeyy9_php后端_php后端curl上传进度条_

    php curl上传或下载文件时创建进度条

    php curl 自动微博登陆

    php curl 自动微博登陆,使用curl,

    php的Curl处理类.zip

    主要介绍了php的curl封装类用法,以实例形式较为详细的讲述了curl封装类及其使用方法,并总结了GET与POST的用法。 使用函数之前我们要需要把php curl模块打开(libeay32.dll, ssleay32.dll, php5ts.dll,...

    php curl远程post上传

    php curl远程post上传

    PHP CURL详解

    PHP CURL详解

    php中curl的get,post通用类.zip

    一个PHP curl get post通用类,curl 通用方法 。。get /post 传送数据,设置发送方式 0 get 1 post。具有很好的参考价值,朋友们如果喜欢可以下载,如果有更好的curl类可以发布到我们php中文网,大家一起学习交流。

    php curl 多线程实现-php程序员的笔记

    php curl 多线程实现-php程序员的笔记

    php7.3 php_curl.dll x64

    windows下php7.3官方自带的php_curl.dll好像有问题,增加扩展curl经常失败

    php_curl.dll

    php_curl.dll

Global site tag (gtag.js) - Google Analytics