CURL模拟post请求上传文件

贴一段醍醐灌顶的话:

逻辑很简单,设置POST变量$post_data,其中upload指向需要发送的文件。这里要注意,我们之前使用POST都是发送一个字符串,然后在服务器端使用file_get_contents(“php//input”)来获取该字符串,和这里的用法不一样,其实POST也可以像GET一样,发送键值对。在服务端有一个超级全局变量$_POST可以像$_GET一样,获取相应的POST数据的值。需要注意的是,上传文件的变量不是存在着$_POST中,而是在$_FILES中;

curl_file

<?php
function curlRequest($url,$data=''){
  $ch=curl_init();
  curl_setopt($ch, CURLOPT_URL, $url);
  curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
  curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);//不验证证书
  if(!empty($data)){
    curl_setopt($ch, CURLOPT_POST, 1);
    // curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($data));
    curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
  }
  $output=curl_exec($ch);
  $errno=curl_errno($ch);
  curl_close($ch);
  return json_decode($output,true);
}

//测试
$url="http://www.luoqiusa.top/wx/upload.php";
// $data=array('name'=>'yolo');
$data=array("myfile"=>"@/var/www/html/wx/upload/0.jpg");//'myfile'是自己定义的文件名,/var/www/html/wx/upload/0.jpg是服务器本地文件地址
$res=curlRequest($url,$data);
print_r($res);

upload.php 

<?php
 if(isset($_FILES['myfile']['tmp_name'])){
    $jsonObj='{"name":"yolo_bean","age":23,"gender":"female"}';
    print_r($jsonObj);
 }

  

原文地址:https://www.cnblogs.com/yolo-bean/p/7802597.html