基于tp6 curl 上传图片

1 篇文章 0 订阅

上传图片先了解下php版本和curl先。
我的版本是php7,curl估计tp6带的
先讲讲我遇到的问题(我这里是上传到第三方的,我就不细说了)
1.curl 上传文件失败
2.curl 上传有传图片但是返回错误
现在来回答上面的两个问题

第一个(curl 上传文件失败)
这是因为php版本的问题貌似5.5以上跟5.5以下的不一致。我现在讲的是php7的
这是post数据生成的时候
现在了解下函数CURLFile
CURLFile(‘图片路径’,‘Content-Type的格式’,‘文件名’)
在这里插入图片描述
这是正确的 post请求上传图片

第二个问题 curl 上传有传图片但是返回错误

这里就涉及到http协议和curl了,大家可以去了解下
注意content-type和content-Disposition
这是我修改过后的少了两个头部参数,也就是content-type和content-Disposition
这是为什么呢
因为我们在前面的
new \CURLFile()这里我们已经设置了content-type(对应第二个参数)和content-Disposition对应第三个参数)了

下面还有几个我在开发中遇到的小知识点(百度深似海,内容泛滥成灾)
curl的post请求大致分为两种 一种是数据请求,另一种是文件上传请求
第一种数据请求的几个关键点
1.http_build_query
纯数据请求最好都经过http_build_query
2.json
这种事json请求的post数据
第二种文件上传请求
因为我用的是php7的版本所以下面讲的都是php7的
第一部分是请求前的数据处理

public function up_img($url=null,$img=null){
//        $post = array('img' => '@'.$img);
        $img_name = basename($img);
        $post = array( new \CURLFile(realpath($img),'image/jpeg',$img_name));

        $headers = [
            'Host:这里我删了',
            'Connection: keep-alive',
            'User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.75 Safari/537.36',
            'Accept: */*',
            'X-Requested-With: XMLHttpRequest',
            'Origin: 这里我删了',
            'Cache-Control: no-cache',
            'Sec-Fetch-Site:: same-origin',
            'Sec-Fetch-Mode: cors',
            'Sec-Fetch-Dest: empty',
            'Accept-Encoding: gzip, deflate, br',
            'Accept-Language: zh-CN,zh;q=0.9',
            'Cookie:这里我删了'

        ];
        $data = [
            'url'=>$url,
            'Referer'=>'这里我删了',
            'headers'=>$headers,
            'post'=>$post
        ];

        $output     = $this->CurlGetImg($data);//GETtcurl
        var_dump($output);die();
        $this->parse($output);
    }

通用的curl请求

public function CurlGetImg($data=null)
    {
        isset($data['url']) ? $url=$data['url']:$url = '';//url
        isset($data['headers']) ? $headers=$data['headers'] : $headers = '';//头部参数
        isset($data['cookie']) ? $cookie=$data['cookie']:$cookie = '';//cookie设置
        isset($data['Referer']) ? $Referer = $data['Referer']:$Referer = '';//referer
        isset($data['text']) ? $text=true : $text = false;//需不需要正文
        isset($data['post']) ?$post =$data['post'] : $post = '';//是不是post请求
       
        $this->LocationUrlOld($data['url']);
        $info = curl_init();
        if($headers){
            curl_setopt($info, CURLOPT_HEADER, true);
            curl_setopt($info,CURLOPT_HTTPHEADER,$headers);
        }
        if($cookie){
            curl_setopt($info, CURLOPT_COOKIE,$cookie);
        }
        if($Referer){
            curl_setopt ($info, CURLOPT_REFERER, $Referer);
        }
        if($post){
            // POST数据
            curl_setopt($info, CURLOPT_POST, 1);
            // 把post的变量加上
            curl_setopt($info, CURLOPT_POSTFIELDS, $post  );
        }
        curl_setopt($info,CURLOPT_SSL_VERIFYPEER,false);//禁用后cURL将终止从服务端进行验证
        curl_setopt($info,CURLOPT_SSL_VERIFYHOST,false);//检查服务器SSL证书中是否存在一个公用名(common name)
        curl_setopt($info,CURLOPT_PROXY,'127.0.0.1:8888');//设置代理服务器(不需要的可以删掉)
        curl_setopt($info, CURLOPT_PROXYPORT, "80"); // 代理端口不需要的可以删掉)
        curl_setopt($info, CURLOPT_RETURNTRANSFER,1);
        curl_setopt($info,CURLOPT_CONNECTTIMEOUT,3600);//响应时长
        if($text){
            curl_setopt($info, CURLOPT_NOBODY, true);// 是否不需要响应的正文,为了节省带宽及时间,在只需要响应头的情况下可以不要正文
        }
        curl_setopt($info,CURLOPT_URL,$url);
        $output = curl_exec($info);
        $b = curl_errno($info);
        curl_close($info);
        if($b>0){
            throw new \think\Exception('url请求错误'.$b, 10006);
        }

        return $output;
    }

本文为原创内容,请爬文章的珍重,营造一个良好成长环境,转载请注明出处。

  • 5
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值