php中curl使用指南


Posted in PHP onFebruary 05, 2015

许多同学在第一次使用curl的时候感觉一个头两个大(包括我在内),看着这一条条的curl_setopt函数完全摸不着头脑,不过在你花10分钟看了我的介绍后相信你以后也能轻松戏耍php的curl了

首先,请看一个curl代码(花10秒钟,略看一遍,然后跳到后文)

<?php 

$data = "<soap:Envelope>[...]</soap:Envelope>"; 

$tuCurl = curl_init(); 

curl_setopt($tuCurl, CURLOPT_URL, "https://example.com/path/for/soap/url/"); 

curl_setopt($tuCurl, CURLOPT_PORT , 443); 

curl_setopt($tuCurl, CURLOPT_VERBOSE, 0); 

curl_setopt($tuCurl, CURLOPT_HEADER, 0); 

curl_setopt($tuCurl, CURLOPT_SSLVERSION, 3); 

curl_setopt($tuCurl, CURLOPT_SSLCERT, getcwd() . "/client.pem"); 

curl_setopt($tuCurl, CURLOPT_SSLKEY, getcwd() . "/keyout.pem"); 

curl_setopt($tuCurl, CURLOPT_CAINFO, getcwd() . "/ca.pem"); 

curl_setopt($tuCurl, CURLOPT_POST, 1); 

curl_setopt($tuCurl, CURLOPT_SSL_VERIFYPEER, 1); 

curl_setopt($tuCurl, CURLOPT_RETURNTRANSFER, 1); 

curl_setopt($tuCurl, CURLOPT_POSTFIELDS, $data); 

curl_setopt($tuCurl, CURLOPT_HTTPHEADER, array("Content-Type: text/xml","SOAPAction: \"/soap/action/query\"", "Content-length: ".strlen($data))); 

$tuData = curl_exec($tuCurl); 

if(!curl_errno($tuCurl)){ 

  $info = curl_getinfo($tuCurl); 

  echo 'Took ' . $info['total_time'] . ' seconds to send a request to ' . $info['url']; 

} else { 

  echo 'Curl error: ' . curl_error($tuCurl); 

} 

curl_close($tuCurl); 

echo $tuData; 

?>

WTF,这到底是在做什么?

想要学会这种“高端”的用法吗?

首先,相信你肯定知道网址大部分是由http开头的,那是因为他们需用通过http(超文本传送协议 HTTP-Hypertext transfer protocol)来进行数据传输,但是传输数据不是简单的将一句"Hello"传到服务器上就搞定的事情,发送者为了方便接受者理解发送者的实际意图以及知道发送人到底是何许人也,发送者往往要将许多额外信息一并发给接受者,就像寄信人需要在信件外套一个信封一样,信封上写着各种发信人的信息。所有的这些最终合并成了一个叫做报文(message)的玩意,也就构成了整个互联网的基础。

php中curl使用指南

curl的工作就是通过http协议发送这些message (php的libcurl目前还支持https、ftp、telnet等其他协议)

现在再看代码,实际上代码只做了五件事情

curl_init()初始化curl
curl_setopt()设置传输数据和参数
curl_exec()执行传输并获取返回数据
curl_errono()返回错误码
curl_close()关闭curl
下面给出使用GET和POST方法如何抓取和提交任意页面的数据

<?php

    //初始化

    $curl = curl_init();

    //设置url

    curl_setopt($curl, CURLOPT_URL, 'http://www.baidu.com');

    //设置返回获取的输出为文本流

    curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);

    //执行命令

    $data = curl_exec($curl);

    //关闭URL请求

    curl_close($curl);

    //显示获得的数据

    print_r($data);

?>

<?php

    //初始化

    $curl = curl_init();

    //设置url

    curl_setopt($curl, CURLOPT_URL, 'http://www.baidu.com');

    //设置返回获取的输出为文本流

    curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);

    //设置post方式提交

    curl_setopt($curl, CURLOPT_POST, 1);

    //设置post数据

    curl_setopt($curl, CURLOPT_POSTFIELDS, array("data"=>"value");

    //执行命令

    $data = curl_exec($curl);

    //关闭URL请求

    curl_close($curl);

    //打印数据

    print_r($data);

?>

感兴趣的同学还可以参考php官方文档,学习更多curl用法

PHP 相关文章推荐
php 采集书并合成txt格式的实现代码
Mar 01 PHP
php提交表单时判断 if($_POST[submit])与 if(isset($_POST[submit])) 的区别
Feb 08 PHP
ThinkPHP的I方法使用详解
Jun 18 PHP
ThinkPHP基于PHPExcel导入Excel文件的方法
Oct 15 PHP
PHP多线程类及用法实例
Dec 03 PHP
PHP计算百度地图两个GPS坐标之间距离的方法
Jan 09 PHP
php+ajax制作无刷新留言板
Oct 27 PHP
php中遍历二维数组并以表格的形式输出的方法
Jan 03 PHP
PHP校验15位和18位身份证号的类封装
Nov 07 PHP
PHP PDO数据库操作预处理与注意事项
Mar 16 PHP
PHP超级全局变量【$GLOBALS,$_SERVER,$_REQUEST等】用法实例分析
Dec 11 PHP
PHP中用Trait封装单例模式的实现
Dec 18 PHP
PHP开发注意事项总结
Feb 04 #PHP
浅谈php命令行用法
Feb 04 #PHP
PHP strtotime函数用法、实现原理和源码分析
Feb 04 #PHP
php curl登陆qq后获取用户信息时证书错误
Feb 03 #PHP
ecshop实现smtp发送邮件
Feb 03 #PHP
PHP中使用php://input处理相同name值的表单数据
Feb 03 #PHP
PHP中实现接收多个name相同但Value不相同表单数据实例
Feb 03 #PHP
You might like
2019十大人气国漫
2020/03/13 国漫
配置支持SSI
2006/11/25 PHP
php 表单数据的获取代码
2009/03/10 PHP
PHP数组无限分级数据的层级化处理代码
2012/12/29 PHP
PHP登陆后跳转到登陆前页面实现思路及代码
2014/01/17 PHP
PHP下 Mongodb 连接远程数据库的实例代码
2017/08/30 PHP
PHP面向对象多态性实现方法简单示例
2017/09/27 PHP
php判断文件上传图片格式的实例详解
2017/09/30 PHP
PHP封装的XML简单操作类完整实例
2017/11/13 PHP
javascript的console.log()用法小结
2012/05/31 Javascript
浅谈JSON.parse()和JSON.stringify()
2015/07/14 Javascript
Jquery+Ajax+PHP+MySQL实现分类列表管理(上)
2015/10/28 Javascript
jQuery基础_入门必看知识点
2016/07/04 Javascript
微信小程序 开发之顶部导航栏实例代码
2017/02/23 Javascript
vue中使用vue-router切换页面时滚动条自动滚动到顶部的方法
2017/11/28 Javascript
微信小程序实现图片选择并预览功能
2019/07/25 Javascript
layui监听下拉选框选中值变化的方法(包含监听普通下拉选框)
2019/09/24 Javascript
iSlider手机端图片滑动切换插件使用详解
2019/12/24 Javascript
JS实现简单打字测试
2020/06/24 Javascript
[46:50]Liquid vs Mineski 2018国际邀请赛小组赛BO2 第二场 8.18
2018/08/19 DOTA
Python爬虫_城市公交、地铁站点和线路数据采集实例
2018/01/10 Python
Python实现PS滤镜特效Marble Filter玻璃条纹扭曲效果示例
2018/01/29 Python
python爬虫之xpath的基本使用详解
2018/04/18 Python
浅谈pandas用groupby后对层级索引levels的处理方法
2018/11/06 Python
django项目中新增app的2种实现方法
2020/04/01 Python
Vichy薇姿加拿大官网:法国药妆,全球专业敏感肌护肤领先品牌
2018/07/11 全球购物
印尼在线购买隐形眼镜网站:Lensza.co.id
2019/04/27 全球购物
医学生实习自我鉴定
2013/09/27 职场文书
大一学生假期实习的自我评价
2013/10/12 职场文书
董事长职责范文
2013/11/08 职场文书
文艺晚会主持词
2014/03/24 职场文书
社区务虚会发言材料
2014/10/20 职场文书
银行自荐信范文
2015/03/25 职场文书
市场督导岗位职责
2015/04/10 职场文书
2019财务毕业实习报告
2019/06/27 职场文书
java解析XML详解
2021/07/09 Java/Android