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(8) php 数组
Mar 05 PHP
用php来改写404错误页让你的页面更友好
Jan 24 PHP
基于Linux调试工具strace与gdb的常用命令总结
Jun 03 PHP
PHPThumb图片处理实例
May 03 PHP
PHP 实现类似js中alert() 提示框
Mar 18 PHP
PHP实现远程下载文件到本地
May 17 PHP
php中实现用数组妩媚地生成要执行的sql语句
Jul 10 PHP
php实现的递归提成方案实例
Nov 14 PHP
大家须知简单的php性能优化注意点
Jan 04 PHP
PHP长网址与短网址的实现方法
Oct 13 PHP
php和redis实现秒杀活动的流程
Jul 17 PHP
laravel框架实现敏感词汇过滤功能示例
Feb 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
Yii调试SQL的常用方法
2014/07/09 PHP
PHP比较运算符的详细介绍
2015/09/29 PHP
PHP正则匹配操作简单示例【preg_match_all应用】
2017/07/10 PHP
js跑马灯代码(自写)
2013/04/17 Javascript
JavaScript中的关键字&quot;VAR&quot;使用详解 分享
2013/07/31 Javascript
原生js获取宽高与jquery获取宽高的方法关系对比
2014/04/04 Javascript
jQuery的deferred对象详解
2014/11/12 Javascript
简介JavaScript中的unshift()方法的使用
2015/06/09 Javascript
javascript之Array 数组对象详解
2016/06/07 Javascript
jQuery实现的瀑布流加载效果示例
2016/09/13 Javascript
浅谈Javascript中的Label语句
2016/12/14 Javascript
vue指令以及dom操作详解
2017/03/04 Javascript
webpack 1.x升级过程中的踩坑总结大全
2017/08/09 Javascript
bootstrap fileinput插件实现预览上传照片功能
2018/01/23 Javascript
解决Vue 通过下表修改数组,页面不渲染的问题
2018/03/08 Javascript
基于vue-ssr的静态网站生成器VuePress 初体验
2018/04/17 Javascript
Node.js利用console输出日志文件的方法示例
2018/04/27 Javascript
vue+jquery+lodash实现滑动时顶部悬浮固定效果
2018/04/28 jQuery
Angular动画实现的2种方式以及添加购物车动画实例代码
2018/08/09 Javascript
Angular6 写一个简单的Select组件示例
2018/08/20 Javascript
微信小程序 函数防抖 解决重复点击消耗性能问题实现代码
2019/09/12 Javascript
[49:42]DOTA2上海特级锦标赛主赛事日 - 3 胜者组第二轮#2Secret VS EG第一局
2016/03/04 DOTA
通过python下载FTP上的文件夹的实现代码
2013/02/10 Python
Python中使用urllib2防止302跳转的代码例子
2014/07/07 Python
跟老齐学Python之list和str比较
2014/09/20 Python
一个基于flask的web应用诞生(1)
2017/04/11 Python
Python实现Smtplib发送带有各种附件的邮件实例
2017/06/05 Python
Django admin禁用编辑链接和添加删除操作详解
2019/11/15 Python
美国网上花店:JustFlowers
2017/02/12 全球购物
Raffaello Network西班牙:意大利拉斐尔时尚购物网
2019/03/12 全球购物
护士在校生自荐信
2014/02/01 职场文书
老师对学生的寄语
2014/04/09 职场文书
大三学年自我鉴定范文(3篇)
2014/09/28 职场文书
冰峪沟导游词
2015/02/09 职场文书
赞美教师的句子
2019/09/02 职场文书
浅谈Vue的computed计算属性
2022/03/21 Vue.js