`
icrwen
  • 浏览: 268591 次
  • 性别: 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扩展 php_curl

    **PHP扩展:php_curl** `php_curl`是PHP中的一个核心扩展,它提供了对cURL库的接口,使得PHP能够与各种网络协议进行交互,包括HTTP、HTTPS、FTP、FTPS等。cURL库本身是一个强大的客户端URL传输工具,而`php_curl`...

    php curl 长连接的实现

    尽管长连接带来了性能优势,但也需要注意以下几点: 1. **连接管理**:需要适当地管理和关闭连接,防止过多的连接占用系统资源。 2. **安全性**:长连接可能增加安全风险,如中间人攻击,因此应谨慎使用。 3. **...

    php curl安装 php中没有编译curl的解决方法for windows

    在PHP开发过程中,cURL库是一个非常重要的工具,它允许我们执行HTTP请求并与其他网络服务进行交互。然而,有时在Windows环境下,你可能会发现PHP环境中并没有预装cURL扩展,这将导致无法使用cURL相关的函数。本文将...

    php curl批量请求url

    在PHP开发中,cURL库是一个非常强大的工具,用于处理HTTP和其他协议的网络请求。它允许程序员模拟浏览器的行为,发送GET、POST等不同类型的HTTP请求,甚至可以处理HTTPS、cookies、HTTP头等复杂情况。本篇文章将深入...

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

    在本文中,我们将深入探讨如何使用PHP的cURL库来模仿form表单提交,特别是提交图片或文件。我们将结合ThinkPHP5(简称TP5)框架来展示一个实际的例子。 首先,了解cURL。cURL是一个客户端URL传输库,它支持多种协议...

    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的Curl处理类

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

    CentOs下安装PHP扩展 curl

    在CentOS系统中,安装PHP扩展是服务器管理中常见的任务,尤其当需要处理与网络相关的功能,如HTTP请求,或者需要使用cURL库时。本文将详细讲解如何在CentOS环境下,不重新编译PHP的情况下,安装cURL扩展。 1. **...

    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库是一个强大的工具,用于执行HTTP和其他协议的请求,它允许开发者模拟浏览器行为,如发送POST请求、处理cookies、设置代理等。本文将深入解析PHP下的cURL用法,以便更好地理解和应用。 1. **初始化...

    php5.3php_curl

    标题“php5.3php_curl”提示我们关注的是PHP 5.3版本的一个特定功能模块,即PHP的cURL扩展。cURL是用于在PHP中处理URLs的库,它允许开发人员通过各种协议(如HTTP、HTTPS、FTP、FTPS等)传输数据。在PHP 5.3中,cURL...

    php7.3 php_curl.dll x64

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

    php curl nginx 499 错误

    在IT行业中,网络编程是不可或缺的一部分,而PHP的cURL库则是进行HTTP和其他协议请求的常用工具。然而,当我们在使用cURL与服务器交互时,可能会遇到一些异常情况,比如"nginx 499错误"。这个错误通常发生在Nginx...

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

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

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

    在PHP后端开发中,有时候我们需要使用cURL库来处理HTTP请求,比如文件的上传或下载。当处理大文件时,为了提供更好的用户体验,我们可能会希望实现一个进度条功能,以便用户可以直观地看到文件传输的进度。本篇文章...

    php_curl_使用实例

    下面详细介绍几个常用的 cURL 函数及其参数: - **`curl_init()`**:初始化 cURL 会话。该函数返回一个 cURL 句柄,用于后续的 cURL 函数调用。 - **`curl_setopt()`**:为 cURL 会话设置选项。接受三个参数: - `...

    php curl 自动微博登陆

    在PHP开发中,`cURL`库是一个非常强大的工具,用于处理HTTP请求和与各种服务器进行交互。在本文中,我们将深入探讨如何使用PHP的cURL功能实现自动微博登录的功能。 首先,我们要理解微博自动登录的基本流程。通常,...

    php实现的Curl封装类

    在PHP开发中,Curl库是一个非常重要的工具,它允许我们执行HTTP请求并获取服务器的响应,支持多种协议,如HTTP、HTTPS、FTP等。为了更方便地使用Curl功能,开发者通常会创建一个Curl封装类,将复杂的Curl设置和调用...

    php curl 上传图片

    在PHP中,`cURL`库提供了一个强大的功能,用于执行HTTP和其他协议的请求。它在Web开发中尤其有用,因为它允许我们模拟浏览器的行为,发送数据、获取响应,包括文件的上传和下载。本篇文章将深入讲解如何使用PHP的...

Global site tag (gtag.js) - Google Analytics