一、简介

  功能:是一个可以使用URL的语法模拟浏览器来传输数据的工具库,支持的协议http、https、ftp、gopher、telnet、dict、file、ldap

  资源类型:cURL 句柄和 cURL 批处理句柄

二、使用

  1. 初始化curl句柄

  $ch = curl_init();

  2. curl句柄设置(默认GET方法)

  curl_setopt($ch,CURLOPT_URL,'http:xxxx')  设置访问的URL地址

  curl_setopt($ch,CURLOPT_HTTPHEADER,array)  设置http请求头, 值为数组形式array('Content-type: text/plain', 'Content-length: 100')

  curl_setopt($ch,CURLOPT_HEADER,false)  设置不返回头信息,提高速度

  curl_setopt($ch,CURLOPT_SSL_VERIFYHOST,false) 访问https站点需要设置这2项 

  curl_setopt($ch,CURLOPT_SSL_VERIFYPEAR,false)

  curl_setopt($ch,CURLOPT_POST,ture)  以post方式请求

  curl_setopt($ch,CURLOPT_POSTFIELDS,$data)  post方式发送的数据,数组

  curl_setopt($ch,CURLOPT_RETURNTRANSFER,true)  true结果以字符串返回,false结果直接输出

  curl_setopt($ch,CURLOPT_FILE,$fp)  输出到文件,$fp为文件指针

  curl_setopt($ch,CURLOPT_AUTOREFERER,true)  被重定向时自动设置header中referer信息

  3. 执行curl句柄

  curl_exec($ch)  返回值true/false,也可设置返回字符串

  4. 关闭curl句柄

  curl_close($ch)

  5. 出错排查

  curl_getinfo()

  curl_error()

三、样例

<?php
/*
* $url URL路径
* $method 传递参数的方法:get、post、put、delete
* $params 参数
* $auth 登录认证:账号和密码
*/
function curl($url,$method,$params,$auth=null){
//1、判断$url,$method,$params是否为空
if(empty($url) || empty($method) || empty($params)){
return '参数不能为空!';
}
//1、初始化CURL句柄
$curl = curl_init();

curl_setopt($curl, CURLOPT_URL, $url);//设置请求的URL
#curl_setopt($curl, CURLOPT_HEADER, false);// 不要http header 加快效率
curl_setopt($curl, CURLOPT_RETURNTRANSFER,1); //设为TRUE把curl_exec()结果转化为字串,而不是直接输出

//2、SSL验证
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE); // https请求时要设置为false 不验证证书和hosts FALSE 禁止 cURL 验证对等证书(peer's certificate), 自cURL 7.10开始默认为 TRUE。从 cURL 7.10开始默认绑定安装。
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE);//检查服务器SSL证书中是否存在一个公用名(common name)。

//传送数据时,有的需要指定数据格式-下面是json格式,utf-8格式
$header[] = "Content-Type:application/json;charset=utf-8";
if(!empty($header)){
curl_setopt ( $curl, CURLOPT_HTTPHEADER, $header );//设置 HTTP 头字段的数组。格式: array('Content-type: text/plain', 'Content-length: 100')
}

//3、请求时间
$timeout = 30;
curl_setopt ($curl, CURLOPT_CONNECTTIMEOUT, $timeout);//设置连接等待时间

//4、不同请求方法的数据提交
switch ($method){
case "GET" :
curl_setopt($curl, CURLOPT_HTTPGET, true);//TRUE 时会设置 HTTP 的 method 为 GET,由于默认是 GET,所以只有 method 被修改时才需要这个选项。
break;
case "POST":
if(is_array($params)){
$params = json_encode($params,320);
}
#curl_setopt($curl, CURLOPT_POST,true);//TRUE 时会发送 POST 请求,类型为:application/x-www-form-urlencoded,是 HTML 表单提交时最常见的一种。
#curl_setopt($curl, CURLOPT_NOBODY, true);//TRUE 时将不输出 BODY 部分。同时 Mehtod 变成了 HEAD。修改为 FALSE 时不会变成 GET。
// curl_setopt($curl, CURLOPT_CUSTOMREQUEST, "POST");//HTTP 请求时,使用自定义的 Method 来代替"GET"或"HEAD"。对 "DELETE" 或者其他更隐蔽的 HTTP 请求有用。 有效值如 "GET","POST","CONNECT"等等;
//设置提交的信息
// curl_setopt($curl, CURLOPT_POSTFIELDS,$params);//全部数据使用HTTP协议中的 "POST" 操作来发送。
//设置请求方式是post方式
curl_setopt($curl,CURLOPT_POST,true);
//设置post请求提交的表单信息
curl_setopt($curl,CURLOPT_POSTFIELDS,$params);
break;
case "PUT" :
curl_setopt ($curl, CURLOPT_CUSTOMREQUEST, "PUT");
curl_setopt($curl, CURLOPT_POSTFIELDS,json_encode($params,320));
break;
case "DELETE":
curl_setopt ($curl, CURLOPT_CUSTOMREQUEST, "DELETE");
curl_setopt($curl, CURLOPT_POSTFIELDS,$params);
break;
default:
echo '方法名不能为空!';
break;
}

//5、传递一个连接中需要的用户名和密码,格式为:"[username]:[password]"。
if (!empty($auth) && isset($auth['username']) && isset($auth['password'])) {
curl_setopt($curl, CURLOPT_USERPWD, "{$auth['username']}:{$auth['password']}");
}

//执行预定义的CURL
$output = curl_exec($curl);
//获取http返回值,最后一个收到的HTTP代码
$status = curl_getinfo($curl, CURLINFO_HTTP_CODE);
if($output === FALSE ){
echo "CURL Error:".curl_error($curl);
}else{
if($status === 200){
//如果返回值是json格式,就需要转换格式
// $output = json_decode($output,true);
}else{
$output = 'fail:请咨询管理员';
}
}
//关闭cURL会话
curl_close($curl);
return $output;

}
$arr = array('name'=>'wangdi');
var_dump(curl('http://127.0.0.1/test/get_data/get_data.php','POST',$arr));

PHP扩展使用-CURL的更多相关文章

  1. linux下php增加curl扩展,生成curl.so文件

    进入php源代码目录 cd /php5.6.9/ext/curl 执行生成so文件编译模式 /usr/local/php/bin/phpize 编译curl扩展 ./configure --with- ...

  2. Linux 编译安装 php 扩展包 curl

    php源码目录:/root/php php编译目录:/usr/local/webserver/php/ curl源码目录:/root/curl 1.curl,主要用于发送http请求,是php的一个扩 ...

  3. linux下安装编译php的curl扩展

    curl扩展的位置(需要编译的版本)/root/install/php-5.5.24/ext/curl 1.进入对应的扩展目录 # cd /root/install/php-5.5.24/ext/cu ...

  4. lamp环境编译安装curl扩展

    Linux编译安装php扩展包curl 1.curl,主要用于发送http请求,是php的一个扩展包. 2.安装过程: (1)curl下载:http://curl.haxx.se/download.h ...

  5. php 采集类snoopy http://www.jb51.net/article/27568.htm | cURL、file_get_contents、snoopy.class.php 优缺点

    Snoopy是一个php类,用来模拟浏览器的功能,可以获取网页内容,发送表单. Snoopy的特点: 1.抓取网页的内容 fetch 2.抓取网页的文本内容 (去除HTML标签) fetchtext ...

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

    php安装扩展模块的思路: 1,首先找到需要安装的扩展模块的目录.一般在/usr/local/php/ext目录下 但是有的模块php源码中不一定有,需要自己下载比如memcache.redis等. ...

  7. 关于CURL的初步认识

    前言:你知道?这个CURL可以做爬虫的工作但是仅限于小型的爬虫.............. (一) CURL的认识 下面我觉得用图片来展示curl比较直观: 所谓的curl就是客户端访问了服务器1,那 ...

  8. PHP之MVC项目实战(三)

    本文主要包括以下内容 标准错误错误处理 http操作 PDO 文件操作 标准错误错误处理 PHP在语法层面上发生的错误 两个过程: 触发阶段(发生一个错误) 处理阶段(如何处理该错误) 触发阶段 系统 ...

  9. BigPipe学习研究

    BigPipe学习研究   from: http://www.searchtb.com/2011/04/an-introduction-to-bigpipe.html 1. 技术背景 FaceBook ...

随机推荐

  1. Linux:目录的查找

    搜索文件与目录 find [查找范围] [查找条件表达式] 常用的选项 -name 按名称查找,允许使用通配符 -type 按文件类型查找 文件类型包括: 普通文件 f 目录 d 块设备文件 b 字符 ...

  2. G1 垃圾收集器架构和如何做到可预测的停顿(阿里)

    CMS垃圾回收机制 参考:图解 CMS 垃圾回收机制原理,-阿里面试题 CMS与G1的区别 参考:CMS收集器和G1收集器优缺点 写这篇文章是基于阿里面试官的一个问题:众所周期,G1跟其他的垃圾回收算 ...

  3. Vue+cordova开发App

    Vue+cordova开发App https://www.imooc.com/article/70062

  4. [C0] 人工智能大师访谈 by 吴恩达

    人工智能大师访谈 by 吴恩达 吴恩达采访 Geoffery Hinton Geoffery Hinton主要观点:要阅读文献,但不要读太多,绝对不要停止编程. Geoffrey Hinton:谢谢你 ...

  5. NOIP模拟赛2(two)

    题目描述 Description 很久很久很久以前,方方方造了一台计算机,计算机中开始有一个数 \(0\) .方方方想要让这个数变成 \(a\) ,他打算每次选择一个整数,把计算机中当前的数按位或上这 ...

  6. A1101 Quick Sort (25 分)

    一.技术总结 这里的一个关键就是理解调换位置排序是时,如果是元主,那么它要确保的条件就只有两个一个是,自己的位置不变,还有就是前面的元素不能有比自己大的. 二.参考代码 #include<ios ...

  7. JWT签名与验签

    签名Token生产 using System; using System.Collections.Generic; using System.IdentityModel.Tokens.Jwt; usi ...

  8. 【Java语言特性学习之三】Java4种对象引用

    为了更灵活的控制对象的生命周期,在JDK1.2之后,引用被划分为(引用的级别和强度由高到低)强引用.软引用.弱引用.虚引用四种类型,每种类型有不同的生命周期,它们不同的地方就在于垃圾回收器对待它们会使 ...

  9. 阿里开源 Dragonwell JDK 重磅发布 GA 版本:生产环境可用

    今年 3 月份,阿里巴巴重磅开源 OpenJDK 长期支持版本 Alibaba Dragonwell的消息,在很长一段时间内都是开发者的讨论焦点,该项目在 Github 上的 Star 数迅速突破 1 ...

  10. Java8新特性——StreamAPI 的使用

    StreamAPI的说明 Java8中有两大最为重要的改变.第一个是 Lambda 表达式:另外一个则是 Stream API. Stream API ( java.util.stream) 把真正的 ...