• php模拟post提交文件图片等


    <?php
        /**
         * Email net.webjoy@gmail.com
         * author jackluo
         * 2014.11.21
         * 
         */
    
        //*
        function curl_post($url, $data, $header = array()){
                if(function_exists('curl_init')) {
                    $ch = curl_init();
                    curl_setopt($ch, CURLOPT_URL, $url);
                    if(is_array($header) && !empty($header)){
                        $set_head = array();
                        foreach ($header as $k=>$v){
                            $set_head[] = "$k:$v";
                        }
                        curl_setopt($ch, CURLOPT_HTTPHEADER, $set_head);
                    }
                    curl_setopt($ch, CURLOPT_HEADER, 0);
                    curl_setopt($ch, CURLOPT_POST, 1);
                    curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
                    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
                    curl_setopt($ch, CURLOPT_TIMEOUT, 1);// 1s to timeout.
                    $response = curl_exec($ch);
                    if(curl_errno($ch)){
                        //error
                        return curl_error($ch);
                    }
                    $reslut = curl_getinfo($ch);
                    print_r($reslut);
                    curl_close($ch);
                    $info = array();
                    if($response){
                        $info = json_decode($response, true);
                    }
                    return $info;
                } else {
                    throw new Exception('Do not support CURL function.');
                }
        }
        //*/
        //  
        function api_notice_increment($url, $data)
        {
            $ch = curl_init();        
            curl_setopt($ch, CURLOPT_HEADER,0);
            curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    
            curl_setopt($ch, CURLOPT_URL, $url);
            curl_setopt($ch, CURLOPT_POST, 1);
    //        $data = http_build_query($data);
            curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
            //curl_file_create
        //    $result =  curl_exec($ch);
            $lst['rst'] = curl_exec($ch);
            $lst['info'] = curl_getinfo($ch);
            curl_close($ch); 
        
            return $lst;
        //    return $result;
        }
    
         /**
             *  curl文件上传
             *  @var  struing  $r_file  上传文件的路劲和文件名  
             *     
             */
        /*     
        function upload_file($url,$r_file)
         {
            $file = array("fax_file"=>'@'.$r_file,'type'=>'image/jpeg');//文件路径,前面要加@,表明是文件上传.
            $curl = curl_init();
            curl_setopt($curl, CURLOPT_URL,$url);
            curl_setopt($curl,CURLOPT_POST,1);
            curl_setopt($curl,CURLOPT_POSTFIELDS,$file);
            curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
            curl_setopt($curl, CURLOPT_HEADER, 0);
            $result = curl_exec($curl);  //$result 获取页面信息 
            curl_close($curl);
            echo $result ; //输出 页面结果
       }*/
        
       function upload_file($url,$filename,$path,$type){
            $data = array(
                'pic'=>'@'.realpath($path).";type=".$type.";filename=".$filename
            );
            $ch = curl_init();
    
       //设置帐号和帐号名
    
       curl_setopt($ch, CURLOPT_USERPWD, 'joe:secret' );
    
            curl_setopt($ch, CURLOPT_URL, $url);
            curl_setopt($ch, CURLOPT_POST, true );
            curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
            curl_setopt($ch, CURLOPT_HEADER, false);
            curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
            // curl_getinfo($ch);
            $return_data = curl_exec($ch);
            curl_close($ch);
            echo $return_data;       
       }
    
      // php 5.5 以后请用以下函数
    
    function upload_file($url,$filename,$path,$type){
              $data = array(
                    'pic'=>new CURLFile(realpath($path))
              );
              $ch = curl_init();
       //也可以用以下注释掉的不用改代码,觉得新版的可以省下点代码,看个人
       //curl_setopt($ch, CURLOPT_SAFE_UPLOAD, false);
       //设置帐号和帐号名
       curl_setopt($ch, CURLOPT_USERPWD, 'joe:secret' );
              curl_setopt($ch, CURLOPT_URL, $url);
              curl_setopt($ch, CURLOPT_POST, true );
              curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
              curl_setopt($ch, CURLOPT_HEADER, false);
              curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
              // curl_getinfo($ch);
              $return_data = curl_exec($ch);
              curl_close($ch);
              echo $return_data;       
       }
    
    
    
    
        if ($_POST) {
            $url = 'http://platform.com/upload/image';
            //
            $path = $_SERVER['DOCUMENT_ROOT'];
    /*
            print_r($_FILES);
            exit;
    */
            //$filename = $path."/232.jpg";
            //upload tmp
            $tmpname = $_FILES['fname']['name'];
            $tmpfile = $_FILES['fname']['tmp_name'];
            $tmpType = $_FILES['fname']['type'];
    //        echo $tmpType;
            upload_file($url,$tmpname,$tmpfile,$tmpType);
            /*
            $data = array(
                    'path'=>"@$path/232.jpg",
                    'name'=>'h'
            );
            */
            //'pic'=>'@/tmp/tmp.jpg', 'filename'=>'tmp'
            //$data = array('pic'=>"@$filename", 'filename'=>'tmp');
    /*
            $data = array(
                'uid'    =>    10086,
                'pic'    =>    '@$tmpfile'.';type='.$tmpType
            );
            $info = api_notice_increment($url, $data);
    */
            //$info = curl_post($url, $data);
            //$info = api_notice_increment($url, $data);
            //upload_file($url,$tmpfile);
            //print_r($info);
            exit;
    /*
            $file = 'H:www	estpsuCARGLSPA-pola.jpg'; //要上传的文件
            $src = upload_curl_pic($file);
            echo $src;
    */
        }    
    ?>
    
    <form action="http://localhost/upload.php" enctype="multipart/form-data"  method="post">
      <p>UpLoad: <input type="text" name="fname" /></p>
      <p>UpLoad: <input type="file" name="fname" /></p>
    
      <input type="submit" value="Submit" />
    </form>

     以下是网上看到的另外的代码

    最近需要用http模拟表单提交,简单的数据提交倒是简单,如果要上传图片就要稍微做些变动了。下面分享一下,利用curl和fsockopen两种方法实现,我测试通过的例子。

    发送请求的页面:fsocketupload.PHP

    <?php
    /**
     * @author zhao jinhan
     * @email: xb_zjh@126.com
     * @url : www.icode100.com
     * @date : 2014年1月18日13:09:42
     * 
     */
    header('Content-type:text/html; charset=utf-8');  //声明编码
    //模拟POST上传图片和数据
    //第一种方法:CURL
    $ch = curl_init();
    $url = 'http://www.test.localhost/fsocketget.php';
    $curlPost = array('sid'=>1,'file'=>'@D:/xampp/htdocs/www/www.test.localhost/images/adding.gif');
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_HEADER, 1);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_POST, 1); //POST提交
    curl_setopt($ch, CURLOPT_POSTFIELDS,$curlPost);
    $data =curl_exec($ch);
    curl_close($ch);
    echo '<pre>';
    var_dump($data);
     
    //第二种方法:fsockopen方法上传
     
    $arr_data = array('sid'=>1,'mid'=>2);  //普通参数
    $var_file='image';       //文件变量名
    $file_type='image/jpeg'; //文件类型
    $filepath = 'D:/xampp/htdocs/www/www.test.localhost/images/2.jpg'; //文件路径
    $filestring = @file_get_contents($filepath) or exit('not found file ( '.$filepath.' )'); //生成文件流
    $host = 'www.test.localhost';
     
     
     
    //构造post请求的头
    $boundary = substr(md5(time()),8,16);  //分隔符
    $header  = "POST /fsocketget.php HTTP/1.1
    ";//一般有post, get这两种
    $header .= "Host: {$host}
    ";
    $header .= "Content-Type: multipart/form-data; boundary={$boundary}
    ";
     
    $data = "";
    //请求普通数据
    foreach($arr_data as $k=>$v){
     $data .= "--{$boundary}
    ";
     $data .= "Content-Disposition: form-data; name="{$k}"
    ";
     $data .= "
    {$v}
    ";
     $data .= "--{$boundary}
    ";
    }
    //请求图片数据
    $filename = basename($filepath); //文件名
    $data .= "--{$boundary}
    ";
    $data .= "Content-Disposition: form-data; name="$var_file"; filename="$filename"
    ";
    $data .= "Content-Type: $file_type
    ";  //
    不可少
    $data .= "
    $filestring
    ";           //
    不可少
    $data .= "--{$boundary}
    ";             //
    不可少
    $header .= "Content-Length: ".strlen($data)."
    
    ";   //
    不可少
     
    //发送post的数据
    $fp = fsockopen($host,80,$errno,$errstr,10) or exit($errstr."--->".$errno);
    fputs($fp,$header.$data);
     
    $inheader = 0;  //1去除请求包的头只显示页面的返回数据 0-保留头
    while (!feof($fp)) {
     $line = fgets($fp,1024);
     if ($inheader && ($line == "
    " || $line == "
    ")) {
      $inheader = 0;
     }
     if ($inheader == 0) {
      echo $line;
     }
    }
     
    fclose($fp);

    请求api页面:fsocketget.php

    <?php  
    /* 接收请求的API */  
    if($_POST){  
     echo '<pre>';  
     print_r($_POST);  
     print_r($_FILES);  
    }else{  
     echo 'error';  
    }  
  • 相关阅读:
    SharePoint 2010 User Profile Sync Service自动停止
    如何区别多个svchost.exe?
    Log Parser分析IIS log的一个简单例子
    Timeout expired. The timeout period elapsed prior to obtaining a connection from the pool. This may have occurred because all pooled connections were in use and max pool size was reached.
    Windows中右键点击文件夹, 结果找不到共享选项卡, 怎么办?
    介绍SOS中的SaveModule命令
    SharePoint中Draft版本的文档不会收到document added的Alert Email
    和我一起学Windows Workflow Foundation(1)创建和调试一个WF实例
    门户网站
    C#基础—— check、lock、using语句归纳
  • 原文地址:https://www.cnblogs.com/zonglonglong/p/6745053.html
Copyright © 2020-2023  润新知