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 相关文章推荐
实现 win2003 下 mysql 数据库每天自动备份
Dec 06 PHP
PHP运行时强制显示出错信息的代码
Apr 20 PHP
PHP将整个网站生成HTML纯静态网页的方法总结
Feb 05 PHP
php输出xml格式字符串(用的这个)
Jul 12 PHP
php页面函数设置超时限制的方法
Dec 01 PHP
php gd等比例缩放压缩图片函数
Jun 12 PHP
PHP实现原生态图片上传封装类方法
Nov 08 PHP
PHP Header失效的原因分析及解决方法
Nov 16 PHP
PHP单例模式应用示例【多次连接数据库只实例化一次】
Dec 18 PHP
PHP连接SQL Server的方法分析【基于thinkPHP5.1框架】
May 06 PHP
PHP图像处理 imagestring添加图片水印与文字水印操作示例
Feb 06 PHP
Thinkphp 框架配置操作之动态配置、扩展配置及批量配置实例分析
May 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 页面编码声明方法详解(header或meta)
2010/03/12 PHP
ThinkPHP之A方法实例讲解
2014/06/20 PHP
PHP基于CURL进行POST数据上传实例
2014/11/10 PHP
通过php添加xml文档内容的方法
2015/01/23 PHP
PHP实现将几张照片拼接到一起的合成图片功能【便于整体打印输出】
2017/11/14 PHP
Yii2框架数据验证操作实例详解
2018/05/02 PHP
PHP利用curl发送HTTP请求的实例代码
2020/07/09 PHP
javascript 关闭IE6、IE7
2009/06/01 Javascript
超轻量级的基于jquery的三级展开列表
2011/04/26 Javascript
javascript里绝对用的上的字符分割函数总结
2014/07/31 Javascript
js实现点击后将文字或图片复制到剪贴板的方法
2014/08/04 Javascript
Javascript中设置默认参数值示例
2014/09/11 Javascript
如何防止JavaScript自动插入分号
2015/11/05 Javascript
JS监听微信、支付宝等移动app及浏览器的返回、后退、上一页按钮的事件方法
2016/08/05 Javascript
Vue框架之goods组件开发详解
2018/01/25 Javascript
详解通过源码解析Node.js中cluster模块的主要功能实现
2018/05/16 Javascript
Vue实现商品详情页的评价列表功能
2019/09/04 Javascript
vue中实现点击空白区域关闭弹窗的两种方法
2020/12/30 Vue.js
python冒泡排序简单实现方法
2015/07/09 Python
Python画图学习入门教程
2016/07/01 Python
一篇文章读懂Python赋值与拷贝
2018/04/19 Python
python 实现在txt指定行追加文本的方法
2018/04/29 Python
influx+grafana自定义python采集数据和一些坑的总结
2018/09/17 Python
python2与python3的print及字符串格式化小结
2018/11/30 Python
Python基于matplotlib画箱体图检验异常值操作示例【附xls数据文件下载】
2019/01/07 Python
Python多版本开发环境管理工具介绍
2019/07/03 Python
基于python plotly交互式图表大全
2019/12/07 Python
Python super()方法原理详解
2020/03/31 Python
Python中实现一行拆多行和多行并一行的示例代码
2020/09/06 Python
合伙协议书
2014/04/23 职场文书
促销活动总结范文
2014/04/30 职场文书
英语教育专业毕业生求职信
2014/08/28 职场文书
2014年企业党支部工作总结
2014/12/04 职场文书
酒店前台岗位职责
2015/04/16 职场文书
Python图像处理之图像拼接
2021/04/28 Python
Python 高级库15 个让新手爱不释手(推荐)
2021/05/15 Python