zoukankan      html  css  js  c++  java
  • 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';  
    }  
  • 相关阅读:
    移植BOA
    [转]Ubuntu(Linux)使用Eclipse搭建C/C++编译环境
    服务器软件设计的算法和问题
    [solve]Bind: Address Already in Use
    Simple guide for Automake/Autoconf by Nick
    Ubuntu(Linux)中设置samba
    VMware不能上网,解决办法
    数组的顺序存储和实现
    根文件系统的构成
    Linux网络编程IP转换函数inet_addr和inet_ntoa
  • 原文地址:https://www.cnblogs.com/zonglonglong/p/6745053.html
Copyright © 2011-2022 走看看