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速度全攻略
Oct 09 PHP
mysql建立外键
Nov 25 PHP
PHPMailer邮件类利用smtp.163.com发送邮件方法
Sep 11 PHP
php 网页游戏开发入门教程一(webgame+design)
Oct 26 PHP
php 字符串压缩方法比较示例
Jan 23 PHP
php反射应用示例
Feb 25 PHP
PHP检测字符串是否为UTF8编码的常用方法
Nov 21 PHP
一段实用的php验证码函数
May 19 PHP
CI框架实现优化文件上传及多文件上传的方法
Jan 04 PHP
Yii2配置Nginx伪静态的方法
May 05 PHP
PHP面向对象五大原则之开放-封闭原则(OCP)详解
Apr 04 PHP
解决laravel5中auth用户登录其他页面获取不到登录信息的问题
Oct 08 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
基于mysql的论坛(1)
2006/10/09 PHP
PHP实现图片简单上传
2006/10/09 PHP
PHP函数spl_autoload_register()用法和__autoload()介绍
2012/02/04 PHP
php小技巧之过滤ascii控制字符
2014/05/14 PHP
为你总结一些php信息函数
2015/10/21 PHP
Yii2基于Ajax自动获取表单数据的方法
2016/08/10 PHP
PHP高效获取远程图片尺寸和大小的实现方法
2017/10/20 PHP
javascript来定义类的规范小结
2010/11/19 Javascript
Javascript 运动中Offset的bug解决方案
2014/12/24 Javascript
javascript生成大小写字母
2015/07/03 Javascript
基于javascript代码实现通过点击图片显示原图片
2015/11/29 Javascript
JavaScript使用DeviceOne开发实战(三)仿微信应用
2015/12/02 Javascript
js判断主流浏览器类型和版本号的简单实现代码
2016/05/26 Javascript
SelecT下拉框选中和取值的解决方法
2016/11/22 Javascript
Bootstrap modal使用及点击外部不消失的解决方法
2016/12/13 Javascript
如何利用JQuery实现从底部回到顶部的功能
2016/12/27 Javascript
Angularjs在360兼容模式下取数据缓存问题的解决办法
2017/06/22 Javascript
vue实现树形菜单效果
2018/03/19 Javascript
Angular使用操作事件指令ng-click传多个参数示例
2018/03/27 Javascript
JavaScript深拷贝和浅拷贝概念与用法实例分析
2018/06/07 Javascript
ES6的异步终极解决方案分享
2019/07/11 Javascript
微信小程序 轮播图实现原理及优化详解
2019/09/29 Javascript
JavaScript实现随机点名器
2020/03/25 Javascript
JavaScript动画实例之粒子文本的实现方法详解
2020/07/28 Javascript
typescript编写微信小程序创建项目的方法
2021/01/29 Javascript
python 字符串转列表 list 出现\ufeff的解决方法
2017/06/22 Python
python: 判断tuple、list、dict是否为空的方法
2018/10/22 Python
对Python2与Python3中__bool__方法的差异详解
2018/11/01 Python
GitHub 热门:Python 算法大全,Star 超过 2 万
2019/04/29 Python
Python高级编程之消息队列(Queue)与进程池(Pool)实例详解
2019/11/01 Python
美国精品家居用品网站:US-Mattress
2016/08/24 全球购物
匡威西班牙官网:Converse西班牙
2019/10/01 全球购物
澳大利亚床上用品、浴巾和家居用品购物网站:Bambury
2020/04/16 全球购物
大学军训的体会
2014/11/08 职场文书
单位车辆管理制度
2015/08/05 职场文书
史上最全书信经典范文大全(建议收藏)
2019/07/10 职场文书