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 和 MySQL 开发的 8 个技巧
Jan 02 PHP
PHP5中的时间相差8小时的解决办法
Mar 28 PHP
mayfish 数据入库验证代码
Apr 30 PHP
php若干单维数组遍历方法的比较
Sep 20 PHP
PHP判断指定时间段的2个方法
Mar 14 PHP
php过滤html标记属性类用法实例
Sep 23 PHP
PHP程序员的技术成长规划
Mar 25 PHP
一键生成各种尺寸Icon的php脚本(实例)
Feb 08 PHP
关于ThinkPhp 框架表单验证及ajax验证问题
Jul 19 PHP
PHP实现超简单的SSL加密解密、验证及签名的方法示例
Aug 28 PHP
在Laravel5.6中使用Swoole的协程数据库查询
Jun 15 PHP
Laravel如何创建服务器提供者实例代码
Apr 15 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新手上路(六)
2006/10/09 PHP
PHP中使用循环实现的金字塔图形
2014/11/08 PHP
php 问卷调查结果统计
2015/10/08 PHP
javascript while语句和do while语句的区别分析
2007/12/08 Javascript
javascript之典型高阶函数应用介绍二
2013/01/10 Javascript
超级简单实现JavaScript MVC 样式框架
2015/03/24 Javascript
javascript中Array()数组函数详解
2015/08/23 Javascript
JS区分浏览器页面是刷新还是关闭
2016/04/17 Javascript
JavaScript用二分法查找数据的实例代码
2017/06/17 Javascript
vuejs使用FormData实现ajax上传图片文件
2017/08/08 Javascript
NodeJS收发GET和POST请求的示例代码
2017/08/25 NodeJs
Dropify.js图片宽高自适应的方法
2017/11/27 Javascript
Mac下通过brew安装指定版本的nodejs教程
2018/05/17 NodeJs
用react-redux实现react组件之间数据共享的方法
2018/06/08 Javascript
react build 后打包发布总结
2018/08/24 Javascript
JavaScript实现简单音乐播放器
2020/04/17 Javascript
PWA介绍及快速上手搭建一个PWA应用的方法
2019/01/27 Javascript
vue实现多条件和模糊搜索功能
2019/05/28 Javascript
Layui 解决表格异步调用后台分页的问题
2019/10/26 Javascript
详细分析vue表单数据的绑定
2020/07/20 Javascript
vue3.0中友好使用antdv示例详解
2021/01/05 Vue.js
python类参数self使用示例
2014/02/17 Python
在Python中利用Into包整洁地进行数据迁移的教程
2015/03/30 Python
wxPython定时器wx.Timer简单应用实例
2015/06/03 Python
Python3中在Anaconda环境下安装basemap包
2018/10/21 Python
Python 隐藏输入密码时屏幕回显的实例
2019/02/19 Python
关于Django Models CharField 参数说明
2020/03/31 Python
css3 transform及原生js实现鼠标拖动3D立方体旋转
2016/06/20 HTML / CSS
保送生自荐信范文
2013/10/06 职场文书
你懂得怎么写自荐信吗?
2013/12/27 职场文书
公司活动邀请函
2014/01/24 职场文书
欧也妮葛朗台读书笔记
2015/06/30 职场文书
儿童诗两首教学反思
2016/02/23 职场文书
关于React Native 无法链接模拟器的问题
2021/06/21 Javascript
python中对列表的删除和添加方法详解
2022/02/24 Python
ECharts transform数据转换和dataZoom在项目中使用
2022/12/24 Javascript