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发送数据和文件的更多相关文章

  1. 使用curl发送post或者get数据

    一. 使用curl可以仿造http的请求,向目标服务器或者是目标IP发送数据,进行操作. (1).使用php操作curl向某个接口上发送GET请求: 下面是写的一个比较简单的请求方式请求数据,传入的参 ...

  2. php通过curl发送XML数据,并获取XML数据

    php编程中经常会用到用xml格式传送数据,如调用微信等第三方接口经常用到,这里演示下php以curl形式发送xml,并通过服务器接收 一.发送xml数据 -- postXml.php <?ph ...

  3. 【ASP.NET Web API教程】5.3 发送HTML表单数据:文件上传与多部分MIME

    原文:[ASP.NET Web API教程]5.3 发送HTML表单数据:文件上传与多部分MIME 注:本文是[ASP.NET Web API系列教程]的一部分,如果您是第一次看本系列教程,请先看前面 ...

  4. php 中使用cURL发送get/post请求,上传图片,批处理

    cURL是利用url语法规定传输文件和数据的工具.php中有curl拓展,一般用来实现网络抓取,模拟发送get   post请求,文件上传. 在php中建立curl的基本步骤如下: 1 初始化     ...

  5. curl基于URL的文件传输工具

    简介 cURL是一款开源的基于URL的文件传输工具,支持HTTP.HTTPS.FTP等协议,支持POST.cookie.认证.扩展头部.限速等特性. curl命令用途广泛,比如下载.发送http请求. ...

  6. CURL不可以读写文件

    最近在学ES(elastic search),参考http://www.learnes.net/里面翻译的官方权威指南(后面发现官网已经推出了中文版文档了).里面有的例子把访问ES的命令做了简化如下: ...

  7. Linux内核--网络栈实现分析(八)--应用层发送数据(下)

    本文分析基于Linux Kernel 1.2.13 原创作品,转载请标明http://blog.csdn.net/yming0221/article/details/7547826 更多请查看专栏,地 ...

  8. SSH服务器与Android通信(3)--Android客户端发送数据

    Android客户端向SSH服务器发送数据主要有三种情况:通过客户端删除数据.添加数据和修改数据. 1.删除数据 先看看jsp文件里面是怎样删除数据的: <td align="cent ...

  9. php以post方式向接口发送数据

    工作需要,我负责收集服务器数据,然后定时向中心服务器发送.我看到了接口信息,需要设置heads头信息,需要发送数据,且是post方式. 这里就用到了curl //发送post请求 function r ...

随机推荐

  1. Golang语言系列-18-Gin框架博客项目

    代码托管在码云: https://gitee.com/lichengguo/my-blog-golang

  2. Java ArrayList【笔记】

    Java ArrayList[笔记] ArrayList ArrayList基本结构 ArrayList 整体架构比较简单,就是一个数组结构 源码中的基本概念 index 表示数组的下标,从 0 开始 ...

  3. Java-Collection、Map和Array之间的转换

    1 List -> Map 设个User类: public class User { private String userName; private String userId; privat ...

  4. java小白困惑的那些事

    刚接触java时,有些技术盲区,查了很多资料也得不到答案,面试时也得遮遮掩掩,这里就列举一些,当年踩过的那些坑 1.http -> https一个网站或接口,从http改到https是否需要额外 ...

  5. Nginx-出现-403-Forbidden

    步骤一: 检查目录权限.权限不足的就加个权限吧. 例子:chmod -R 755 / var/www 步骤二: 打开nginx.conf 例子:vim /etc/nginx/nginx.conf 把 ...

  6. Spring-boot注入配置为java静态属性

    配置文件 注入静态变量 注意 类上面有:@Component注解 使用注入的静态变量 成功

  7. chcon命令详解

    导读 chcon命令是修改对象(文件)的安全上下文,比如:用户.角色.类型.安全级别.也就是将每个文件的安全环境变更至指定环境.使用--reference选项时,把指定文件的安全环境设置为与参考文件相 ...

  8. SpringCloud bootstrap.yml 和application.yml 加载原理

    Spring Cloud 官方文档:https://cloud.spring.io/spring-cloud-static/spring-cloud.html 一个Spring Cloud的操作是通过 ...

  9. linux0.01内核源码结构

    目录 boot 系统引导. fs 文件系统. include 头文件.一些C标准库,系统核心库. init 入口.main.c. kernel 内核. lib 库.C源程序,一些基本核心的程序. mm ...

  10. Linkerd 2.10(Step by Step)—配置代理并发

    Linkerd 2.10 系列 快速上手 Linkerd v2 Service Mesh(服务网格) 腾讯云 K8S 集群实战 Service Mesh-Linkerd2 & Traefik2 ...