php curl发送数据和文件
function mycurl($file, $url, $aid) {
// 如果文件名是中文名,将中文字符编码转换一下
$file=iconv("UTF-8","gb2312", $file);
$data = [
// 还有一种打成数据流的方法.
'pic'=>new \CURLFile($file),
'name' => 'qb',
// 自定义盐签
'token' => 'e10adc3949ba59abbe56e057f20f883e',
'aid' => $aid
];
// 创建一个新cURL资源
$ch = curl_init();
// 设置URL和相应的选项
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); // 跳过证书验证(https)的网站无法跳过,会报错
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); // 跳过证书验证
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); // 返回的数据不打印
//伪造网页来源地址,伪造来自百度的表单提交
curl_setopt($ch, CURLOPT_REFERER, "http://www.baidu.com");
curl_setopt($ch, CURLOPT_POST, 1); //表单数据,是正规的表单设置值为非0
/**
* 使用数组提供post数据时,CURL组件大概是为了兼容@filename这种上传文件的写法,
* 默认把content_type设为了multipart/form-data。虽然对于大多数web服务器并
没有影响,但是还是有少部分服务器不兼容。本文得出的结论是,在没有需要上传文件的
情况下,尽量对post提交的数据进行http_build_query,然后发送出去,能实现更好的兼容性,更小的请求数据包。
* curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($data));
*/
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 10);
curl_setopt($ch, CURLOPT_TIMEOUT, 100); //设置curl执行超时时间最大是多少
// 抓取URL并把它传递给浏览器
$rs = curl_exec($ch);
if($rs === false) {
return 'Curl error: ' . curl_error($ch);
}
// 关闭cURL资源,并且释放系统资源
curl_close($ch);
return $rs;
}
上面是发送文件
下面是接受文件
/**
* 获取file数据
* @return array
*/
public function get_file()
{
// file 文件
$file = $_FILES;
// 其他参数
$post = $_POST;
// 接口盐签
$tokne = 'e10adc3949ba59abbe56e057f20f883e';
if (empty($file) || empty($post)) {
$res = ['code' => 199, 'msg' => '文件丢失!'];
echo json_encode($res);
exit;
}
if ($post['token'] != $tokne) {
$res = ['code' => 199, 'msg' => '鉴权失败!'];
echo json_encode($res);
exit;
}
if ($file) {
$file_data = $this->file_move($file, $post['aid']);
if (!empty($file_data)) {
$res = ['code' => 200, 'msg' => '头像上传成功!'];
echo json_encode($res);
exit;
} else {
$res = ['code' => 199, 'msg' => '头像存储失败!'];
echo json_encode($res);
exit;
}
}
}
/**
* 接口获取file类型文件直接转存
* @param $file
* @param $aid -- 用户aid
* @return array|string
*/
public function file_move($file, $aid)
{
$data = '';
foreach ($file as $image) { $name = $image['name'];
$type = strtolower(substr($name, strrpos($name, '.') + 1));
$allow_type = ['jpg', 'jpeg', 'gif', 'png']; //判断文件类型是否被允许上传
if (!in_array($type, $allow_type)) {
continue;
} // 文件名
// $file_name = date('Ymd') . time() . rand(100, 999) . '.' . $type;
// app_id 命名
$file_name = $aid . '.' . $type; //开始移动文件到相应的文件夹
if (move_uploaded_file($image['tmp_name'], ROOT_PATH . 'public' . DS . 'data' . DS . 'image' . DS . $file_name)) {
$data = ROOT_PATH . 'public' . DS . 'data' . DS . 'image' . DS . $file_name;
}
}
return $data;
}
php curl发送数据和文件的更多相关文章
- 使用curl发送post或者get数据
一. 使用curl可以仿造http的请求,向目标服务器或者是目标IP发送数据,进行操作. (1).使用php操作curl向某个接口上发送GET请求: 下面是写的一个比较简单的请求方式请求数据,传入的参 ...
- php通过curl发送XML数据,并获取XML数据
php编程中经常会用到用xml格式传送数据,如调用微信等第三方接口经常用到,这里演示下php以curl形式发送xml,并通过服务器接收 一.发送xml数据 -- postXml.php <?ph ...
- 【ASP.NET Web API教程】5.3 发送HTML表单数据:文件上传与多部分MIME
原文:[ASP.NET Web API教程]5.3 发送HTML表单数据:文件上传与多部分MIME 注:本文是[ASP.NET Web API系列教程]的一部分,如果您是第一次看本系列教程,请先看前面 ...
- php 中使用cURL发送get/post请求,上传图片,批处理
cURL是利用url语法规定传输文件和数据的工具.php中有curl拓展,一般用来实现网络抓取,模拟发送get post请求,文件上传. 在php中建立curl的基本步骤如下: 1 初始化 ...
- curl基于URL的文件传输工具
简介 cURL是一款开源的基于URL的文件传输工具,支持HTTP.HTTPS.FTP等协议,支持POST.cookie.认证.扩展头部.限速等特性. curl命令用途广泛,比如下载.发送http请求. ...
- CURL不可以读写文件
最近在学ES(elastic search),参考http://www.learnes.net/里面翻译的官方权威指南(后面发现官网已经推出了中文版文档了).里面有的例子把访问ES的命令做了简化如下: ...
- Linux内核--网络栈实现分析(八)--应用层发送数据(下)
本文分析基于Linux Kernel 1.2.13 原创作品,转载请标明http://blog.csdn.net/yming0221/article/details/7547826 更多请查看专栏,地 ...
- SSH服务器与Android通信(3)--Android客户端发送数据
Android客户端向SSH服务器发送数据主要有三种情况:通过客户端删除数据.添加数据和修改数据. 1.删除数据 先看看jsp文件里面是怎样删除数据的: <td align="cent ...
- php以post方式向接口发送数据
工作需要,我负责收集服务器数据,然后定时向中心服务器发送.我看到了接口信息,需要设置heads头信息,需要发送数据,且是post方式. 这里就用到了curl //发送post请求 function r ...
随机推荐
- 页面模型 PageModel
Razor页面中的程序处理方法 OnGet 和 OnGetAsync是同样的处理程序,因此不能共存,否则会报错. 视图数据 ViewData 视图数据是从页面模型向内容页面传递数据的容器.视图数据是以 ...
- tomcat下载、安装及配置
一,下载Tomcat 1.进入官网Http://tomcat.apache.org/,选择download,下载所需要的Tomcat版本. 注意有zip和exe两种格式的 zip(64-bit Win ...
- Maven 下载、安装与配置
一.需要准备的东西 确定电脑上已经成功安装JDK 二.下载与安装 1. 前往https://maven.apache.org/download.cgi下载最新版的Maven程序: 注意:Maven3. ...
- stm32 串口接收一次后再也无法接受,接受都为0
经检测为串口接受后进入别的程序,开辟了2048的临时数组,因为堆栈溢出.stm32总共堆栈为
- BuildPack 打包
无需 dockerfile,使用 buildpacks 打包镜像 书接上文,聪明如你已经发现项目中没有定义 dockerfile,但我们依然能打镜像,是如何做到的呢?正如上面提到的 gradle 的 ...
- Redis应用场景及缓存问题
1.应用场景 (1) 缓存 缓存机制几乎在所有的大型网站都有使用,合理地使用缓存不仅可以加快数据的访问速度,而且能够有效地降低后端数据源的压力.Redis 提供了键值过期时间设置,并且也提供了灵活 ...
- ffmpeg第2篇:简单滤镜与复杂滤镜的区别
在ffmpeg的滤镜中,有简单滤镜(simple filter)和复杂滤镜(complex filter)两种. 使用简单滤镜时,用-vf选项,使用复杂滤镜时,使用-filter_complex或-l ...
- Socket通信协议解析(文章摘要)
参考网址: https://zhuanlan.zhihu.com/p/84800923 在计算机通信领域,socket 被翻译为"套接字",它是计算机之间进行通信的一种约定或一种方 ...
- 请问在电脑里PNP是什么意思啊?
PnP(Plug and Play,即插即用)是指用户不必干预计算机的各个外围设备对系统资源的分配,而将这一繁杂的工作交给系统,由系统自身去解决底层硬件资源,包括IRQ(中断请求).I/O(输入输出端 ...
- 详述 MySQL 中的行级锁、表级锁和页级锁
转自:https://blog.csdn.net/qq_35246620/article/details/69943011 refer:cnblogs.com/f-ck-need-u/p/899547 ...