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 相关文章推荐
AMFPHP php远程调用(RPC, Remote Procedure Call)工具 快速入门教程
May 10 PHP
php判断输入不超过mysql的varchar字段的长度范围
Jun 24 PHP
PHP中获取文件扩展名的N种方法小结
Feb 27 PHP
PHP框架Swoole定时器Timer特性分析
Aug 19 PHP
windows7下php开发环境搭建图文教程
Jan 06 PHP
PHP开发Apache服务器配置
Jul 15 PHP
PHP中error_reporting()用法详解
Aug 31 PHP
什么是OneThink oneThink后台添加插件步骤
Apr 13 PHP
PHP判断用户是否已经登录(跳转到不同页面或者执行不同动作)
Sep 22 PHP
Laravel框架基于ajax和layer.js实现无刷新删除功能示例
Jan 17 PHP
PHP 模拟登陆功能实例详解
Sep 10 PHP
php redis setnx分布式锁简单原理解析
Oct 23 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
php根据操作系统转换文件名大小写的方法
2014/02/24 PHP
Linux系统中设置多版本PHP共存配合Nginx服务器使用
2015/12/21 PHP
javascript Array.sort() 跨浏览器下需要考虑的问题
2009/12/07 Javascript
json2.js的初步学习与了解
2011/10/06 Javascript
JavaScript基本编码模式小结
2012/05/23 Javascript
ztree获取当前选中节点子节点id集合的方法
2015/02/12 Javascript
jQuery实现根据类型自动显示和隐藏表单
2015/03/18 Javascript
js实现图片放大和拖拽特效代码分享
2015/09/05 Javascript
vue 下列表侧滑操作实例代码详解
2018/07/24 Javascript
[01:34]完美“圣”典宣传片震撼发布,12.17与你不见不散
2016/12/16 DOTA
python中随机函数random用法实例
2015/04/30 Python
python定时执行指定函数的方法
2015/05/27 Python
一个基于flask的web应用诞生 使用模板引擎和表单插件(2)
2017/04/11 Python
利用Python破解斗地主残局详解
2017/06/30 Python
python实现发送邮件功能代码
2017/12/14 Python
python中列表和元组的区别
2017/12/18 Python
python搭建服务器实现两个Android客户端间收发消息
2018/04/12 Python
python matplotlib绘图,修改坐标轴刻度为文字的实例
2018/05/25 Python
深入了解python中元类的相关知识
2019/08/29 Python
python实现的按要求生成手机号功能示例
2019/10/08 Python
Django接收照片储存文件的实例代码
2020/03/07 Python
python 6.7 编写printTable()函数表格打印(完整代码)
2020/03/25 Python
pyCharm 实现关闭代码检查
2020/06/09 Python
Python使用struct处理二进制(pack和unpack用法)
2020/11/12 Python
Python list和str互转的实现示例
2020/11/16 Python
Sofft鞋官网:世界知名鞋类品牌
2017/03/28 全球购物
香港优质食材和美酒专门店:FoodWise
2017/09/01 全球购物
eVitamins日本:在线购买折扣维生素、补品和草药
2019/04/04 全球购物
财务管理专业自荐信范文
2013/12/24 职场文书
岗位职责的构建方法
2014/02/01 职场文书
应聘编辑自荐信范文
2014/03/12 职场文书
警示教育活动总结
2014/05/05 职场文书
公司建议书怎么写
2014/05/15 职场文书
2014年销售助理工作总结
2014/12/01 职场文书
先进班集体事迹材料
2014/12/25 职场文书
九华山导游词
2015/02/03 职场文书