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 相关文章推荐
图形数字验证代码
Oct 09 PHP
支持php4、php5的mysql数据库操作类
Jan 10 PHP
php下尝试使用GraphicsMagick的缩略图功能
Jan 01 PHP
探讨:array2xml和xml2array以及xml与array的互相转化
Jun 24 PHP
PHP实现的汉字拼音转换和公历农历转换类及使用示例
Jul 01 PHP
php json_encode()函数返回json数据实例代码
Oct 10 PHP
ThinkPHP打开验证码页面显示乱码的解决方法
Dec 18 PHP
通过php删除xml文档内容的方法
Jan 23 PHP
php对二维数组进行相关操作(排序、转换、去空白等)
Nov 04 PHP
PHP的Yii框架中使用数据库的配置和SQL操作实例教程
Mar 17 PHP
ThinkPHP 3.2.2实现事务操作的方法
May 05 PHP
PHP中md5()函数的用法讲解
Mar 30 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的ajax框架xajax入门与试用介绍
2010/12/19 PHP
ThinkPHP让分页保持搜索状态的方法
2014/07/02 PHP
PHP第三方登录―QQ登录实现方法
2017/02/06 PHP
php实现不通过扩展名准确判断文件类型的方法【finfo_file方法与二进制流】
2017/04/18 PHP
php传值和传引用的区别点总结
2019/11/19 PHP
jQuery .attr()和.removeAttr()方法操作元素属性示例
2013/07/16 Javascript
基于promise.js实现nodejs的promises库
2014/07/06 NodeJs
JS实现横向拉伸动感伸缩菜单效果代码
2015/09/04 Javascript
JavaScript 计算笛卡尔积实例详解
2016/12/02 Javascript
Bootstrap表格使用方法详解
2017/02/17 Javascript
JavaScript实现多重继承的方法分析
2018/01/09 Javascript
Vue不能检测到Object/Array更新的情况的解决
2018/06/26 Javascript
webpack打包多页面的方法
2018/11/30 Javascript
小程序实现层叠卡片滑动效果
2019/08/26 Javascript
使用 js 简单的实现 bind、call 、aplly代码实例
2019/09/07 Javascript
vant 解决tab切换插件标题样式自定义的问题
2020/11/13 Javascript
python如何求解两数的最大公约数
2018/09/27 Python
网易有道2017内推编程题 洗牌(python)
2019/06/19 Python
matplotlib.pyplot画图并导出保存的实例
2019/12/07 Python
python实现简单日志记录库glog的使用
2019/12/13 Python
浅谈Python __init__.py的作用
2020/10/28 Python
老生常谈CSS中的长度单位
2016/06/27 HTML / CSS
css3实现蒙版弹幕功能
2019/06/18 HTML / CSS
canvas绘制树形结构可视图形的实现
2020/04/03 HTML / CSS
澳大利亚婴儿喂养品牌:Cherub Baby
2018/11/01 全球购物
linux面试题参考答案(2)
2015/12/06 面试题
交通事故检查书范文
2014/01/30 职场文书
企业业务员岗位职责
2014/03/14 职场文书
货物运输服务质量承诺书
2014/05/29 职场文书
六年级学生评语大全
2014/12/26 职场文书
五年级学生期末评语
2014/12/26 职场文书
初一年级组工作总结
2015/08/12 职场文书
幼儿园教师教学反思
2016/03/02 职场文书
2019暑期安全倡议书!
2019/06/27 职场文书
Java基础——Map集合
2022/04/01 Java/Android
数据设计之权限的实现
2022/08/05 MySQL