PHP cURL模块

简介:


cURL是利用URL语法在命令行方式下工作的文件传输工具,目前苹果机器已经内置了cURL。cURL是一个综合性的传输工具,对HTTP、FTP等协议提供了广泛的支持,它甚至可以实现迅雷、快车等下载工具的所有功能。PHP中也提供了对cURL语法的支持。

  PHP支持的由Daniel
Stenberg创建的libcurl库允许你与各种的服务器使用各种类型的协议进行连接和通讯。libcurl目前支持http、https、ftp、gopher、telnet、dict、file和ldap协议。libcurl同时也支持HTTPS认证、HTTP
POST、HTTP PUT、 FTP 上传(这个也能通过PHP的FTP扩展完成)、HTTP 基于表单的上传、代理、cookies和用户名+密码的认证。

为什么需要cURL:


  一般读取文件(URL)的方法是使用PHP内置的一些读文件函数,比如file_get_contents,file等(参见文章《PHP读取文件的常见方法》);但是这些方法都只能进行简单的文件读取,不能实现复杂的功能:向URL
POST数据、使用代理服务器、读取使用SSL协议的URL、URL登陆认证等。而cURL恰恰提供了对这些功能的支持。

开启方法:


  1. 拷贝PHP目录中的libeay32.dll 和 ssleay32.dll 两个文件到 C:\windows\system32 目录。

  2. 修改php.ini。去掉 extension = php_curl.dll 前面的分号。

  3. 重启Apache服务

  4. 查看phpinfo,可以看到curl已开启

建立cURL请求的基本步骤:


1. 初始化

    使用curl_init方法初始化一个cURL句柄

$ch = curl_init(“http://www.example.com/”);

curl_init方法提供了一个可选参数URL,返回一个cURL句柄供curl_setopt(), curl_exec()和curl_close() 函数使用。

如果在curl_init中没有指定URL,则需要在curl_setopt中手工设置这个值,如果指定了URL,则CURLOPT_URL被自动设成这个值。

  2. 设置变量

    使用curl_setopt方法设置一个cURL传输参数,或者使用curl_setopt_array批量设置一组参数。

  
 curl_setopt($ch, CURLOPT_FILE, $fp);
curl_setopt($ch, CURLOPT_HEADER, 0);

    其中$ch为curl_init初始化时返回的cURL句柄。

3. 执行并获取结果

    使用curl_exec执行一个cURL会话,成功时返回 TRUE
或者在失败时返回 FALSE.
然而,如果 CURLOPT_RETURNTRANSFER选项被设置,函数执行成功时会返回执行的结果,失败时返回 FALSE 。

    curl_exec($ch);

    还可以使用curl_getinfo获取一个cURL会话的信息。

    curl_getinfo($info);

    curl_getinfo返回的数组中包括如下信息:

  • “url” //资源网络地址

  • “content_type” //内容编码

  • “http_code” //HTTP状态码

  • “header_size” //header的大小

  • “request_size” //请求的大小

  • “filetime” //文件创建时间

  • “ssl_verify_result” //SSL验证结果

  • “redirect_count” //跳转技术

  • “total_time” //总耗时

  • “namelookup_time” //DNS查询耗时

  • “connect_time” //等待连接耗时

  • “pretransfer_time” //传输前准备耗时

  • “size_upload” //上传数据的大小

  • “size_download” //下载数据的大小

  • “speed_download” //下载速度

  • “speed_upload” //上传速度

  • “download_content_length”//下载内容的长度

  • “upload_content_length” //上传内容的长度

  • “starttransfer_time” //开始传输的时间

  • “redirect_time”//重定向耗时

4. 关闭cURL会话

    使用curl_close关闭cURL会话,并释放所有资源(包括cURL句柄$ch等)。

    curl_close($ch);

  一个完整的例子如下:

?





1

2

3

4

5

6

7

8

9

10

11

12

13

<?php

    // 1. 初始化

    $ch
= curl_init("http://www.baidu.com");

    // 2. 设置选项

    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);  //将curl_exec()获取的信息以文件流的形式返回,而不是直接输出,如果没有设置CURLOPT_RETURNTRANSFER,curl_exec($ch)将直接输出返回内容。

    // 3. 执行会话并获取内容

    $output
= curl_exec($ch);  //或者使用curl_multi_getcontent()获取会话返回的内容

    echo
$output;

    $info
= curl_getinfo($ch);

    print_r($info);

    // 4. 关闭curl会话

    curl_close($ch);

?>

当然我们还可以使用curl_error来获取会话的错误信息。

?





1

2

if($output
=== false)//注意是三个等号,表示检查返回值是boolean类型,如果是两个等号,返回值为空字符串也会被认为是false

    echo
‘cURL error:‘.curl_error($ch);

例如,我们直接访问支付宝的首页,由于支付宝首页基于SSL协议,直接访问会提示证书错误:

?





1

2

cURL error:SSL certificate problem, verify that the CA cert is OK. Details:

error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed

使用代理服务器

?





1

2

3

4

5

6

7

8

9

10

<?php

    // 1. 初始化

    $ch
= curl_init("http://www.baidu.com");

    // 2. 设置代理服务器

    curl_setopt($ch, CURLOPT_PROXY, ‘127.0.0.1:8888‘);

    // 3. 执行会话

    curl_exec($ch);

    // 4. 关闭curl会话

    curl_close($ch);

?>

向URL POST数据

?





1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

<?php

    //POST数据

    $curlPost
= array(

        ‘name‘=>‘myname‘,

        ‘pwd‘=>‘mypassword‘

    );

    //或者 $curlPost = ‘name=myname&pwd=mypassword‘;

  //初始化

    $ch
= curl_init("http://localhost/SP/getpost.php");

    //设置

    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

    curl_setopt($ch, CURLOPT_POST, 1);    //设施post方式提交数据

    curl_setopt($ch, CURLOPT_POSTFIELDS, $curlPost);    //设置POST的数据

    //执行会话并获取内容

    $output
= curl_exec($ch);

    echo
$output;

    //关闭curl会话

    curl_close($ch);

?>

使用浏览器用户代理

?





1

2

3

4

5

6

7

8

9

10

11

12

13

<?php

    // 1. 初始化

    $ch
= curl_init("http://www.baidu.com");

    // 2. 设置

    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

    //设置User-Agent为iPhone下的Safafi

    curl_setopt($ch, CURLOPT_USERAGENT, ‘Mozilla/5.0 (iPhone; U; CPU like Mac OS X; en) AppleWebKit/420+ (KHTML, like Gecko) Version/3.0 Mobile/1A537a Safari/419.‘);

    // 3. 执行会话并获取内容

    $output
= curl_exec($ch);

    echo
$output;

    // 4. 释放curl句柄

    curl_close($ch);

?>

访问SSL协议的URL

?





1

2

3

4

5

6

7

8

9

10

11

12

13

14

<?php

    // 1. 初始化

    $ch
= curl_init("https://www.alipay.com");

    // 2. 设置

    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);//使用服务器端验证

    curl_setopt($ch, CURLOPT_USERPWD, "myusername:mypassword");//设置登录用户名和密码

    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);//允许服务器端重定向

    // 3. 执行会话并获取内容

    $output
= curl_exec($ch);

    echo
$output;

    // 4. 释放curl句柄

    curl_close($ch);

?>

cURL还有很多其他的实际用途,比如检查你博客的友情链接是否都有效,这里就需要用到curl_getinfo()函数返回的http_code值了;还可以实现上传文件的功能等等。

PHP cURL模块,布布扣,bubuko.com

时间: 2024-12-19 13:03:15

PHP cURL模块的相关文章

php安装扩展模块(curl模块)

php安装扩展模块的思路: 1,首先找到需要安装的扩展模块的目录.一般在/usr/local/php/ext目录下 但是有的模块php源码中不一定有,需要自己下载比如memcache.redis等. 2,通过phpize工具生成configure文件. 3,./configure -with-php-config=/usr/local/php/bin/php-config 4,make&&make install 5,通过/usr/local/php/bin/php -i |grep 'e

解决PHP 5.6.11中cURL模块问题!

按照网上的教程写了一个cURL的小例子,在apache环境下执行,一点反应也没有,放在IIS环境里就ok的,感觉问题一定出在动态连接库上,因为配置文件里的php_curl.dll已经打开了,而且在iis上ok: 网上找了一些解决方案: ----------------------------- 设置了[环境变量]:phpext,PHPRC:无效 把php_curl.dll 放到apache/bin下:无效 检查了一下apache/bin目录下也有这两个libeay32.dll,ssleay32.

配置php的curl模块问题

问题 checking for cURL in default path... not foundconfigure: error: Please reinstall the libcurl distribution - easy.h should be in <curl-dir>/include/curl/ 解决方法 yum -y install curl-devel

PHP如何打印出curl 模块交互的 http 请求与响应 header?

<?php //$url = "http://www.baidu.com"; $url = "www.qy.com"; $ch = curl_init($url); curl_setopt($ch, CURLOPT_HEADER, true); // 启用时会将头文件的信息作为数据流输出. curl_setopt($ch, CURLOPT_NOBODY, true); // 启用时将不对HTML中的BODY部分进行输出. curl_setopt($ch, CU

PHP 启动 cURL模块以及启动失败的解决方案

配置方法: php_curl.dll libeay32.dll ssleay32.dll php5ts.dll 复制到 %windir%/system32 以及php 目录的ext目录 下 并且找到php.ini(phpinfo里显示的那个php.ini文件) 修改了extension=php_curl.dll 并把前面的分号去掉 还重起了APACHE / IIS 这些DLL 5.2.4PHP版本可以在这里找 下载 有时侯好象还是不行,就把php_curl.dll libeay32.dll ss

php5.6开启curl

1.   打开php安装目录,打开ext目录,是否有php_curl.dll扩展文件,如果没有该扩展文件,请在网上下载此文件. 2.   打开php.ini,找到  ;extension=php_curl.dll, 去掉注释,重启Apache 3.  在php下的ext目录找到libssh2.dll, php_curl.dll, ssleay32.dll, libeay32.dll,将这四个文件复制到windows/system32下. 4. 将libssh2.dll复制到Apahe 下的bin

NodeJS常用模块介绍

收集了NodeJS开发中常用的一些模块. MVC框架 - Express Express 是轻量灵活的Nodejs Web应用框架,它可以快速地搭建网站.Express框架建立在Nodejs内置的Http模块上,并对Http模块再包装,从而实际Web请求处理的 功能.它支持多种前端模板,如Jade, EJS等.它是T.J大神的作品,不过已经交由其它团队维护了. Koa是T.J大神的另外一个作品,号称下一 代NodeJS web框架.使用 koa 编写 web 应用,通过组合不同的 generat

php5.6及以上版本利用curl文件上传

PHP的cURL支持通过给CURL_POSTFIELDS传递关联数组(而不是字符串)来生成multipart/form-data的POST请求. 传统上,PHP的cURL支持通过在数组数据中,使用“@+文件全路径”的语法附加文件,供cURL读取上传.这与命令行直接调用cURL程序的语法是一致的: curl_setopt(ch, CURLOPT_POSTFIELDS, array( 'file' => '@'.realpath('image.png'), )); equals $ curl -F

Windows下CURL扩展无效之终极解决办法

最近安装了一个opencart的B2C电商网站,网站需要开启CURL扩展,参考网上方法木有成功,最后研究了很久,现在整理出来,和大家分享一下,希望大家少走弯路. 不废话,直接来干货!操作分四步: 1.启动配置文件php.ini文件php_curll.dll扩展,至于配置文件php.ini的文件路径根据各位的安装环境而定,我的目录是"D:\Develop\PHP\"下: 2.网上常用的libeay32.dll.ssleay32.dll.php_curll.dll拷贝到"C:\S