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 广告调用类代码(支持Flash调用)
Aug 11 PHP
PHP函数microtime()用法与说明
Dec 04 PHP
php教程之魔术方法的使用示例(php魔术函数)
Feb 12 PHP
yii框架表单模型使用及以数组形式提交表单数据示例
Apr 30 PHP
如何让搜索引擎抓取AJAX内容解决方案
Aug 25 PHP
PHP中使用BigMap实例
Mar 30 PHP
今天你说520了吗?不仅有php表白书还有java表白神器
May 20 PHP
利用PHP如何写APP接口详解
Aug 23 PHP
使用PHPExcel导出Excel表
Sep 08 PHP
ThinkPHP框架整合微信支付之Native 扫码支付模式一图文详解
Apr 09 PHP
php实现 master-worker 守护多进程模式的实例代码
Jul 20 PHP
PHP程序员简单的开展服务治理架构操作详解(三)
May 14 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-redis中文文档介绍
2013/02/07 PHP
PHP时间处理类操作示例
2018/09/05 PHP
jQuery Ajax方法调用 Asp.Net WebService 的详细实例代码
2011/04/27 Javascript
jquery 插件开发 extjs中的extend用法小结
2013/01/04 Javascript
jQuery事件绑定.on()简要概述及应用
2013/02/07 Javascript
Jquery实现弹出层分享微博插件具备动画效果
2013/04/03 Javascript
Javascript表格翻页效果的具体实现
2013/10/05 Javascript
setTimeout()与setInterval()方法区别介绍
2013/12/24 Javascript
jQuery打印指定区域Html页面并自动分页
2014/07/04 Javascript
KnockoutJS 3.X API 第四章之数据控制流with绑定
2016/10/10 Javascript
JS判断鼠标进入容器的方向与window.open新窗口被拦截的问题
2016/12/23 Javascript
vue 粒子特效的示例代码
2017/09/19 Javascript
vue-router实现tab标签页(单页面)详解
2017/10/17 Javascript
Vuejs实现购物车功能
2017/11/05 Javascript
浅谈node.js 命令行工具(cli)
2018/05/10 Javascript
VUE实现移动端列表筛选功能
2019/08/23 Javascript
使用eslint和githooks统一前端风格的技巧
2020/07/29 Javascript
Python的SQLalchemy模块连接与操作MySQL的基础示例
2016/07/11 Python
Python中的连接符(+、+=)示例详解
2017/01/13 Python
python3 字符串/列表/元组(str/list/tuple)相互转换方法及join()函数的使用
2019/04/03 Python
使用Python实现文字转语音并生成wav文件的例子
2019/08/08 Python
python实现的接收邮件功能示例【基于网易POP3服务器】
2019/09/11 Python
浅析python中while循环和for循环
2019/11/19 Python
python将四元数变换为旋转矩阵的实例
2019/12/04 Python
Django 后台带有字典的列表数据与页面js交互实例
2020/04/03 Python
HTML5语义化元素你真的用对了吗
2019/08/22 HTML / CSS
vue项目实现分页效果
2021/03/24 Vue.js
土建施工员岗位职责
2014/07/16 职场文书
秋菊打官司观后感
2015/06/03 职场文书
中学生国庆节演讲稿2015
2015/07/30 职场文书
严以用权学习心得体会
2016/01/12 职场文书
实习报告怎么写
2019/06/20 职场文书
经典格言警句:没有热忱,世间便无进步
2019/11/13 职场文书
Oracle创建只读账号的详细步骤
2021/06/07 Oracle
Tomcat执行startup.bat出现闪退的原因及解决办法
2022/04/20 Servers
PYTHON基于Pyecharts绘制常见的直角坐标系图表
2022/04/28 Python