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 相关文章推荐
解决MySQL中文输出变成问号的问题
Jun 05 PHP
php利用header函数实现文件下载时直接提示保存
Nov 12 PHP
php 多关键字 高亮显示实现代码
Apr 23 PHP
ThinkPHP关联模型操作实例分析
Sep 23 PHP
php file_get_contents抓取Gzip网页乱码的三种解决方法
Nov 12 PHP
php保存二进制原始数据为图片的程序代码
Oct 14 PHP
PHP使用JSON和将json还原成数组
Feb 12 PHP
php实现无限级分类(递归方法)
Aug 06 PHP
PHP 实现字符串翻转(包含中文汉字)的实现代码
Apr 01 PHP
PHP排序算法之快速排序(Quick Sort)及其优化算法详解
Apr 21 PHP
ThinkPHP框架下微信支付功能总结踩坑笔记
Apr 10 PHP
Laravel Reponse响应客户端示例详解
Sep 03 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中使用json数据格式定义字面量对象的方法
2014/08/20 PHP
PHP插件PHPMailer发送邮件功能
2017/02/28 PHP
PHP Pipeline 实现中间件的示例代码
2020/04/26 PHP
BOOM vs RR BO5 第四场 2.14
2021/03/10 DOTA
Prototype 1.5.0_rc1 及 Prototype 1.5.0 Pre0小抄本
2006/09/22 Javascript
一页面多XMLHttpRequest对象
2007/01/22 Javascript
javascript 冒泡排序 正序和倒序实现代码
2010/12/14 Javascript
怎么清空javascript数组
2013/05/11 Javascript
JavaScript获得指定对象大小的方法
2015/07/01 Javascript
JS实现的简洁二级导航菜单雏形效果
2015/10/13 Javascript
JS动态计算移动端rem的解决方案
2016/10/14 Javascript
Html5 js实现手风琴效果
2020/04/17 Javascript
详解vue.js2.0父组件点击触发子组件方法
2017/05/10 Javascript
vue项目部署上线遇到的问题及解决方法
2018/06/10 Javascript
NodeJs项目中关闭ESLint的方法
2018/08/09 NodeJs
详解Vue源码中一些util函数
2019/04/24 Javascript
layui table设置某一行的字体颜色方法
2019/09/05 Javascript
wxpython 学习笔记 第一天
2009/03/16 Python
在Python中关于中文编码问题的处理建议
2015/04/08 Python
python 性能提升的几种方法
2016/07/15 Python
对Python字符串中的换行符和制表符介绍
2018/05/03 Python
Python格式化输出%s和%d
2018/05/07 Python
python 从csv读数据到mysql的实例
2018/06/21 Python
python 缺失值处理的方法(Imputation)
2019/07/02 Python
django ModelForm修改显示缩略图 imagefield类型的实例
2019/07/28 Python
解决pycharm中opencv-python导入cv2后无法自动补全的问题(不用作任何文件上的修改)
2020/03/05 Python
Tessabit美国:集世界奢侈品和设计师品牌的意大利精品买手店
2020/06/29 全球购物
建筑设计师岗位职责
2013/11/18 职场文书
给公司的建议书范文
2014/05/13 职场文书
八达岭长城导游词
2015/01/30 职场文书
党支部综合考察意见
2015/06/01 职场文书
教你怎么用Python处理excel实现自动化办公
2021/04/30 Python
SpringBoot中HttpSessionListener的简单使用方式
2022/03/17 Java/Android
SpringBoot中使用Redis作为全局锁示例过程
2022/03/24 Java/Android
Python+Matplotlib图像上指定坐标的位置添加文本标签与注释
2022/04/11 Python
输入框跟随文字内容适配宽实现示例
2022/08/14 Javascript