PHP中使用CURL发送get/post请求上传图片批处理功能


Posted in PHP onOctober 15, 2018

cURL是利用url语法规定传输文件和数据的工具。php中有curl拓展,一般用来实现网络抓取,模拟发送get   post请求,文件上传。

在php中建立curl的基本步骤如下:

1.初始化       

2. 设置选项,包括url     

3. 执行并获取结果  

4. 释放curl句柄。

在工作和学习中,我也是时常用的curl。由于在使用curl设置选项时,各种选项比较难以记忆,需要参考,故在此记录下常用的一些例子,以便后来参考。

实例一 : 抓取网页数据(以拉手网开放api为例,也是get请求)

<?php
header("Content-type: text/html; charset=utf-8"); 
$ch = curl_init();//初始化
/*============开始设置curl各种选项================*/
curl_setopt($ch, CURLOPT_URL, "http://open.lashou.com/opendeals/lashou/city.xml");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$html = curl_exec($ch);//执行句柄,获取返回内容
curl_close($ch);//释放句柄
echo $html

如果用这种方法发get请求,参数附加到url后面即可,如curl_setopt($ch, CURLOPT_URL, "http://localhost/tqj/date/p822.php?name=yyyyy");

实例二:  利用curl发送post请求

<?php
$uri = "http://localhost/tqj/date/p822.php";
// post参数数组
$data = array (
  'name' => 'tianquanjun',
  'password' => 'tianquanjun',
);
//初始化
$ch = curl_init ();
//各种项设置,网上参考而来,可以查看php手册,自己设置
curl_setopt ( $ch, CURLOPT_URL, $uri );
curl_setopt ( $ch, CURLOPT_POST, 1 );//post方式
curl_setopt ( $ch, CURLOPT_HEADER, 0 );
curl_setopt ( $ch, CURLOPT_RETURNTRANSFER, 1 );
curl_setopt ( $ch, CURLOPT_POSTFIELDS, $data );
//执行
$return = curl_exec ( $ch );
//释放
curl_close ( $ch );
print_r($return);

实例三  :curl 过程调试与错误信息处理

<?php
$uri = "http://localhost/tqj/date/p822.php";
// post参数数组
$data = array (
  'name' => 'tianquanjun',
  'password' => 'tianquanjun',
);
//初始化
$ch = curl_init ();
//各种项设置,网上参考而来,可以查看php手册,自己设置
curl_setopt ( $ch, CURLOPT_URL, $uri );
curl_setopt ( $ch, CURLOPT_POST, 1 );//post方式
curl_setopt ( $ch, CURLOPT_HEADER, 0 );
curl_setopt ( $ch, CURLOPT_RETURNTRANSFER, 1 );
curl_setopt ( $ch, CURLOPT_POSTFIELDS, $data );
//执行
$return = curl_exec ( $ch );
//容错机制
if($return === false){
 var_dump(curl_error($ch));
 }
//curl_getinfo()获取各种运行中信息,便于调试 
$info = curl_getinfo($ch);
echo "执行时间".$info['total_time'].PHP_EOL;
//释放
curl_close ( $ch );
print_r($return);
?>

其中利用curl_error()获取错误信息,curl_getinfo()获取运行相关信息。

实例四:  上传图片,获取返回信息。

跨域上传图片,同时获取返回信息,这个就能大显身手。和post比较像,注意文件之前加一个@符号

<?php
$uri = "http://localhost/tqj/date/p822.php";
// post参数数组
$data = array (
  'author' => 'tianquanjun',
  'upload' => '@C:\Users\tianquanjun.DANGDANG\Pictures\a.jpg',
);
//初始化
$ch = curl_init ();
//各种项设置,网上参考而来,可以查看php手册,自己设置
curl_setopt ( $ch, CURLOPT_URL, $uri );
curl_setopt ( $ch, CURLOPT_POST, 1 );//post方式
curl_setopt ( $ch, CURLOPT_HEADER, 0 );
curl_setopt ( $ch, CURLOPT_RETURNTRANSFER, 1 );
curl_setopt ( $ch, CURLOPT_POSTFIELDS, $data );
//执行
$return = curl_exec ( $ch );
//容错机制
if($return === false){
 var_dump(curl_error($ch));
 }
//curl_getinfo()获取各种运行中信息,便于调试 
$info = curl_getinfo($ch);
echo "执行时间".$info['total_time'].PHP_EOL;
//释放
curl_close ( $ch );
print_r($return);

实例五 : curl批处理。

curl有一个高级特性,批处理句柄。允许打开多个curl链接。 

批处理就是打开多个curl句柄,并把这些句柄指派给一个批处理句柄,然后在while循环里等待处理完毕。curl_multi_exec()算是称得上多线程处理,不过它还是属于异步的范畴。

<?php
header("Content-type: text/html; charset=gbk");
$urls=array('http://www.baidu.com','http://www.qq.com/');
$ch=array();
//批处理句柄
$mh=curl_multi_init();
//打开多个curl句柄,并指派给一个批处理句柄
$ch[0]=curl_init($urls[0]);
$ch[1]=curl_init($urls[1]);
for($i=0;$i<2;$i++)
{
curl_setopt($ch[$i],CURLOPT_RETURNTRANSFER,1);
curl_multi_add_handle($mh,$ch[$i]);
}
$running = NULL;
do{
 usleep(10000);
 curl_multi_exec($mh,$running);//实现批处理,可以看做curl多线程,实际是异步范畴
}while($running>0);
$res=array();
for($j=0;$j<2;$j++)
{
 $res[$j]=curl_multi_getcontent($ch[$j]);
}
//关闭句柄
for($k=0;$k<2;$k++)
{
 curl_multi_remove_handle($mh,$ch[$k]);
}
curl_multi_close($mh);
print_r($res);
?>

基本算是列举了常用的一些实例。要想灵活运用curl,还是得熟悉curl的各个设置项,这些设置项才是curl的灵魂。

总结

以上所述是小编给大家介绍的PHP中使用CURL发送get/post请求上传图片批处理 功能,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

PHP 相关文章推荐
一个可查询所有表的“通用”查询分页类
Oct 09 PHP
粗略计算在线时间,bug:ip相同
Dec 09 PHP
php中一个有意思的日期逻辑处理
Mar 25 PHP
php多维数组去掉重复值示例分享
Mar 02 PHP
destoon在360浏览器下出现用户被强行注销的解决方法
Jun 26 PHP
php创建和删除目录函数介绍和递归删除目录函数分享
Nov 18 PHP
php实现的http请求封装示例
Nov 08 PHP
PHP实现数据库统计时间戳按天分组输出数据的方法
Oct 10 PHP
phpStudy 2016 使用教程详解(支持PHP7)
Oct 18 PHP
PHP实现的多维数组排序算法分析
Feb 10 PHP
CodeIgniter框架钩子机制实现方法【hooks类】
Aug 21 PHP
PHP Swoole异步读取、写入文件操作示例
Oct 24 PHP
深入理解 PHP7 中全新的 zval 容器和引用计数机制
Oct 15 #PHP
php实现二叉树中和为某一值的路径方法
Oct 14 #PHP
php中青蛙跳台阶的问题解决方法
Oct 14 #PHP
PHP通过文件路径获取文件名的实例代码
Oct 14 #PHP
ThinkPHP中获取指定日期后工作日的具体日期方法
Oct 14 #PHP
php实现数组中出现次数超过一半的数字的统计方法
Oct 14 #PHP
php5.5使用PHPMailer-5.2发送邮件的完整步骤
Oct 14 #PHP
You might like
兼容性比较好的PHP生成缩略图的代码
2011/01/12 PHP
php数组查找函数in_array()、array_search()、array_key_exists()使用实例
2014/04/29 PHP
Ubuntu12下编译安装PHP5.3开发环境
2015/03/27 PHP
详解PHP的Yii框架中自带的前端资源包的使用
2016/03/31 PHP
php设计模式之职责链模式实例分析【星际争霸游戏案例】
2020/03/27 PHP
基于PHP实现解密或加密Cloudflar邮箱保护
2020/06/24 PHP
JavaScript 自动完成脚本整理(33个)
2009/10/20 Javascript
JS的反射问题
2010/04/07 Javascript
JS跨域总结
2012/08/30 Javascript
带左右箭头图片轮播的JS代码
2013/12/18 Javascript
浅谈javascript六种数据类型以及特殊注意点
2013/12/20 Javascript
常用jQuery选择器总结
2014/07/11 Javascript
解决jquery中动态新增的元素节点无法触发事件问题的两种方法
2015/10/30 Javascript
自定义类似于jQuery UI Selectable 的Vue指令v-selectable
2017/08/23 jQuery
浅谈vuex 闲置状态重置方案
2018/01/04 Javascript
js经验分享 JavaScript反调试技巧
2018/03/10 Javascript
vue+webpack实现异步加载三种用法示例详解
2018/04/24 Javascript
JavaScript实现汉字转换为拼音及缩写的方法示例
2019/03/28 Javascript
vue中v-text / v-html使用实例代码详解
2019/04/02 Javascript
跟混乱的页面弹窗说再见
2019/04/11 Javascript
微信小程序跨页面数据传递事件响应实现过程解析
2019/12/19 Javascript
[43:51]2014 DOTA2国际邀请赛中国区预选赛 Dream Times VS TongFu
2014/05/22 DOTA
详细介绍Ruby中的正则表达式
2015/04/10 Python
Python实现连接两个无规则列表后删除重复元素并升序排序的方法
2018/02/05 Python
python生成1行四列全2矩阵的方法
2018/08/04 Python
python 获取页面表格数据存放到csv中的方法
2018/12/26 Python
利用python在excel里面直接使用sql函数的方法
2019/02/08 Python
详解Pymongo常用查询方法总结
2021/01/29 Python
微软瑞士官方网站:Microsoft瑞士
2018/04/20 全球购物
Maison Lab荷兰:名牌Outlet购物
2018/08/10 全球购物
Otticanet澳大利亚:最顶尖的世界名牌眼镜, 能得到打折季的价格
2018/08/23 全球购物
空指针到底是什么
2012/08/07 面试题
护理自荐信范文
2013/10/05 职场文书
市三好学生主要事迹
2014/01/28 职场文书
21岁生日感言
2014/02/27 职场文书
项目技术负责人岗位职责
2015/04/13 职场文书