8wDlpd.png
8wDFp9.png
8wDEOx.png
8wDMfH.png
8wDKte.png
PHP5.6及以上如何使用cURL进行模拟post文件 PHP
admin 2022-8-28

    由于最近在研究图床,看到SM的图床不错,就想着把图片传到sm上去,代码如下:

 

<?php
function post($url, $data) {


//模拟POST上传图片和数据
//定义Cookie存储路径必须使用绝对路径
$cookie_jar= dirname(__FILE__)."/pic.cookie"
$UserAgent = 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko)';
//获取Cookie,将cookie存入文
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HEADER,1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_jar);
$content = curl_exec($ch);
curl_close($ch);
   //初使化init方法
   $ch = curl_init();
   //指定URL
   curl_setopt($ch, CURLOPT_URL, $url);
   //设定请求后返回结果
   curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
   //声明使用POST方式来进行发送
   curl_setopt($ch, CURLOPT_POST, 1);
   //加入Cookie
   curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_jar);
   //发送的数据
   curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
   //忽略ssl证书
   curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
   curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
   //忽略header头信息
   curl_setopt($ch, CURLOPT_HEADER, 0);
   curl_setopt($ch, CURLOPT_USERAGENT, $UserAgent);
   //设置超时时间
   curl_setopt($ch, CURLOPT_TIMEOUT, 30);
   //发送请求
   $output = curl_exec($ch);
   //关闭curl
   curl_close($ch);
   //返回数据
   return $output;
}

$post_data = array('smfile' => '@/logo.png');
//需要上传的文件
$url = 'https://sm.ms/api/upload';//sm的地址
echo post($url, $data);
?>

结果在ep虚拟主机上便好好的,放到宝塔上边就不行了

研究好久发现PHP5.6及以上版本已经不能@的方法post文件需要用到 CURLFile( )这个函数,于是我改了代码,果然出现下边的样子,大功告成。

只要将

array('smfile' => '@/logo.png');

成成

array('smfile' =>new CURLFile(realpath("logo.png"))); 

//realpath("logo.png")获取文件真实路径

 

即可。

最后于 2022-10-17 被admin编辑 ,原因:
最新回复 (1)
    • 朕弟分享 | 专注小众,乐于分享!
      3
          
返回
发新帖 搜索 反馈 回顶部