zoukankan      html  css  js  c++  java
  • 淘宝SDK扒出来的CURL调用含文件上传代码

    <?php
    function curl($url,$postFields=null){
        $ch=curl_init();
        curl_setopt($ch,CURLOPT_URL,$url);
        curl_setopt($ch,CURLOPT_FAILONERROR,false);
        curl_setopt($ch,CURLOPT_RETURNTRANSFER,true);
        //if($this->readTimeout){
            curl_setopt($ch,CURLOPT_TIMEOUT,300);
        //}
        //if($this->connectTimeout){
            curl_setopt($ch,CURLOPT_CONNECTTIMEOUT,300);
        //}
        curl_setopt($ch,CURLOPT_USERAGENT,"top-sdk-php");
        //https 请求
        if(strlen($url)>5&&strtolower(substr($url,0,5))=="https"){
            curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,false);
            curl_setopt($ch,CURLOPT_SSL_VERIFYHOST,false);
        }
    
        //POST
        if(is_array($postFields)&&0<count($postFields)){
            $postBodyString="";
            $postMultipart=false;
            foreach($postFields as $k=>$v){
                if(!is_string($v))
                    continue ;
                //判断是不是文件上传
                if("@"!=substr($v,0,1)){
                    $postBodyString.="$k=".urlencode($v)."&";
                }else{
                    //文件上传用multipart/form-data,否则用www-form-urlencoded
                    $postMultipart=true;
                    if(class_exists('CURLFile')){
                        $postFields[$k]=new CURLFile(substr($v,1));
                    }
                }
            }
            unset($k,$v);
            curl_setopt($ch,CURLOPT_POST,true);
            if($postMultipart){
                if(class_exists('CURLFile')) {
                    curl_setopt($ch,CURLOPT_SAFE_UPLOAD,true);
                }else{
                    if(defined('CURLOPT_SAFE_UPLOAD')){
                        curl_setopt($ch,CURLOPT_SAFE_UPLOAD,false);
                    }
                }
                curl_setopt($ch,CURLOPT_POSTFIELDS,$postFields);
            }else{
                $header=array("content-type:application/x-www-form-urlencoded;charset=UTF-8");
                curl_setopt($ch,CURLOPT_HTTPHEADER,$header);
                curl_setopt($ch,CURLOPT_POSTFIELDS,substr($postBodyString,0,-1));
            }
        }
        $reponse=curl_exec($ch);
        if (curl_errno($ch)){
            throw new Exception(curl_error($ch),0);
        }else{
            $httpStatusCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
            if(200!==$httpStatusCode){
                throw new Exception($reponse,$httpStatusCode);
            }
        }
        curl_close($ch);
        return $reponse;
    }
    
    function curl_with_memory_file($url, $postFields = null, $fileFields = null){
        $ch=curl_init();
        curl_setopt($ch,CURLOPT_URL, $url);
        curl_setopt($ch,CURLOPT_FAILONERROR,false);
        curl_setopt($ch,CURLOPT_RETURNTRANSFER,true);
        //if($this->readTimeout){
            curl_setopt($ch,CURLOPT_TIMEOUT,300);
        //}
        //if($this->connectTimeout){
            curl_setopt($ch,CURLOPT_CONNECTTIMEOUT,300);
        //}
        curl_setopt($ch,CURLOPT_USERAGENT,"top-sdk-php" );
        //https 请求
        if(strlen($url)>5&&strtolower(substr($url,0,5))=="https"){
            curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,false);
            curl_setopt($ch,CURLOPT_SSL_VERIFYHOST,false);
        }
        //生成分隔符
        $delimiter='-------------'.uniqid();
        //先将post的普通数据生成主体字符串
        $data='';
        if($postFields!=null){
            foreach($postFields as $name=>$content) {
                $data.="--".$delimiter."
    ";
                $data.='Content-Disposition:form-data;name="'.$name.'"';
                //multipart/form-data 不需要urlencode,参见 http:stackoverflow.com/questions/6603928/should-i-url-encode-post-data
                $data.="
    
    ".$content."
    ";
            }
            unset($name,$content);
        }
    
        //将上传的文件生成主体字符串
        if($fileFields!=null){
            foreach($fileFields as $name=>$file) {
                $data.="--".$delimiter."
    ";
                $data.='Content-Disposition:form-data; name="'.$name.'";filename="'.$file['name'].""
    ";
                $data.='Content-Type:'.$file['type']."
    
    ";//多了个文档类型
                $data.=$file['content']."
    ";
            }
            unset($name,$file);
        }
        //主体结束的分隔符
        $data.="--".$delimiter."--";
        curl_setopt($ch,CURLOPT_POST,true);
        curl_setopt($ch,CURLOPT_HTTPHEADER,array(
                'Content-Type: multipart/form-data;boundary='.$delimiter,
                'Content-Length:'.strlen($data))
        );
        curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
        curl_setopt($ch,CURLOPT_POSTFIELDS,$data);
    
        $reponse=curl_exec($ch);
        unset($data);
    
        if(curl_errno($ch)){
            throw new Exception(curl_error($ch),0);
        }else{
            $httpStatusCode=curl_getinfo($ch,CURLINFO_HTTP_CODE);
            if (200!==$httpStatusCode){
                throw new Exception($reponse,$httpStatusCode);
            }
        }
        curl_close($ch);
        return $reponse;
    }
    
    print_r(curl_with_memory_file("http://localhost/aa.php",
        array("a"=>1,"b"=>2),
        array(
        array(
        "name"=>"a.png",
        "type"=>"application/x-png",
        "content"=>file_get_contents("http://pic002.cnblogs.com/images/2011/42876/2011050119000033.png")
        ),
        array(
        "name"=>"b.png",
        "type"=>"application/x-png",
        "content"=>file_get_contents("http://pic002.cnblogs.com/images/2011/42876/2011050119000033.png")
        )
        )
    ));
    print_r(curl("http://localhost/aa.php",array("a"=>1,"b"=>2,"c"=>3,"d"=>"@d:/TB1eH7vNFXXXXcLXpXXwu0bFXXX.png")));
    ?>
    

    附件:http://files.cnblogs.com/files/mengdejun/curl_fun.zip

  • 相关阅读:
    Amphiphilic Carbon Molecules [UVA
    2018宁夏邀请赛I题 bubble sort(思维题
    CF1198E Rectangle Painting 2(最小割 思维
    Problem : 这个题如果不是签到题 Asm.Def就女装(积性函数dp
    cogs2223. [SDOI2016 Round1] 生成魔咒(后缀数组 hash 二分 set
    cogs1709. [SPOJ 705] 不同的子串(后缀数组
    cogs249 最长公共子串(后缀数组 二分答案
    hdu2222 Keywords Search (AC自动机板子
    ccpc网赛 hdu6703 array(权值线段树
    ccpc网赛 hdu6705 path(队列模拟 贪心
  • 原文地址:https://www.cnblogs.com/mengdejun/p/6121139.html
Copyright © 2011-2022 走看看