php利用fsockopen GET/POST提交表单及上传文件

5年以前  |  阅读数:1077 次  |  编程语言:PHP 

php利用fsockopen GET/POST提交表单及上传文件,具体内容如下

1.GET

get.php


    <?php 
    $host = 'demo.fdipzone.com'; 
    $port = 80; 
    $errno = ''; 
    $errstr = ''; 
    $timeout = 30; 
    $url = '/socket/getapi.php'; 

    $param = array( 
      'name' => 'fdipzone', 
      'gender' => 'man' 
    ); 

    $url = $url.'?'.http_build_query($param); 

    // create connect 
    $fp = fsockopen($host, $port, $errno, $errstr, $timeout); 

    if(!$fp){ 
      return false; 
    } 

    // send request 
    $out = "GET ${url} HTTP/1.1\r\n"; 
    $out .= "Host: ${host}\r\n"; 
    $out .= "Connection:close\r\n\r\n"; 

    fputs($fp, $out); 

    // get response 
    $response = ''; 
    while($row=fread($fp, 4096)){ 
      $response .= $row; 
    } 

    fclose($fp); 

    $pos = strpos($response, "\r\n\r\n"); 
    $response = substr($response, $pos+4); 

    echo $response; 
    ?> 

getapi.php


    <?php 
    $name = $_GET['name']; 
    $gender = $_GET['gender']; 

    echo 'name='.$name.'<br>'; 
    echo 'gender='.$gender; 
    ?> 

2.POST

post.php


    <?php 
    $host = 'demo.fdipzone.com'; 
    $port = 80; 
    $errno = ''; 
    $errstr = ''; 
    $timeout = 30; 
    $url = '/socket/postapi.php'; 

    $param = array( 
      'name' => 'fdipzone', 
      'gender' => 'man', 
      'photo' => file_get_contents('photo.jpg') 
    ); 

    $data = http_build_query($param); 

    // create connect 
    $fp = fsockopen($host, $port, $errno, $errstr, $timeout); 

    if(!$fp){ 
      return false; 
    } 

    // send request 
    $out = "POST ${url} HTTP/1.1\r\n"; 
    $out .= "Host:${host}\r\n"; 
    $out .= "Content-type:application/x-www-form-urlencoded\r\n"; 
    $out .= "Content-length:".strlen($data)."\r\n"; 
    $out .= "Connection:close\r\n\r\n"; 
    $out .= "${data}"; 

    fputs($fp, $out); 

    // get response 
    $response = ''; 
    while($row=fread($fp, 4096)){ 
      $response .= $row; 
    } 

    fclose($fp); 

    $pos = strpos($response, "\r\n\r\n"); 
    $response = substr($response, $pos+4); 

    echo $response; 
    ?>

postapi.php


    <?php 
    define('UPLOAD_PATH', dirname(__FILE__).'/upload'); 

    $name = $_POST['name']; 
    $gender = $_POST['gender']; 
    $photo = $_POST['photo']; 

    $filename = time().'.jpg'; 
    file_put_contents(UPLOAD_PATH.'/'.$filename, $photo, true); 

    echo 'name='.$name.'<br>'; 
    echo 'gender='.$gender.'<br>'; 
    echo '<img src="upload/'.$filename.'">'; 
    ?> 

3.上传文件

file.php


    <?php 
    $host = 'demo.fdipzone.com'; 
    $port = 80; 
    $errno = ''; 
    $errstr = ''; 
    $timeout = 30; 
    $url = '/socket/fileapi.php'; 

    $form_data = array( 
      'name' => 'fdipzone', 
      'gender' => 'man', 
    ); 

    $file_data = array( 
      array( 
        'name' => 'photo', 
        'filename' => 'photo.jpg', 
        'path' =>'photo.jpg' 
      ) 
    ); 

    // create connect 
    $fp = fsockopen($host, $port, $errno, $errstr, $timeout); 

    if(!$fp){ 
      return false; 
    } 

    // send request 
    srand((double)microtime()*1000000); 
    $boundary = "---------------------------".substr(md5(rand(0,32000)),0,10); 

    $data = "--$boundary\r\n"; 

    // form data 
    foreach($form_data as $key=>$val){ 
      $data .= "Content-Disposition: form-data; name=\"".$key."\"\r\n"; 
      $data .= "Content-type:text/plain\r\n\r\n"; 
      $data .= rawurlencode($val)."\r\n"; 
      $data .= "--$boundary\r\n"; 
    } 

    // file data 
    foreach($file_data as $file){ 
      $data .= "Content-Disposition: form-data; name=\"".$file['name']."\"; filename=\"".$file['filename']."\"\r\n"; 
      $data .= "Content-Type: ".mime_content_type($file['path'])."\r\n\r\n"; 
      $data .= implode("",file($file['path']))."\r\n"; 
      $data .= "--$boundary\r\n"; 
    } 

    $data .="--\r\n\r\n"; 

    $out = "POST ${url} HTTP/1.1\r\n"; 
    $out .= "Host:${host}\r\n"; 
    $out .= "Content-type:multipart/form-data; boundary=$boundary\r\n"; // multipart/form-data 
    $out .= "Content-length:".strlen($data)."\r\n"; 
    $out .= "Connection:close\r\n\r\n"; 
    $out .= "${data}"; 

    fputs($fp, $out); 

    // get response 
    $response = ''; 
    while($row=fread($fp, 4096)){ 
      $response .= $row; 
    } 

    fclose($fp); 

    $pos = strpos($response, "\r\n\r\n"); 
    $response = substr($response, $pos+4); 

    echo $response; 
    ?> 

fileapi.php


    <?php 
    define('UPLOAD_PATH', dirname(__FILE__).'/upload'); 

    $name = $_POST['name']; 
    $gender = $_POST['gender']; 

    $filename = time().'.jpg'; 

    echo 'name='.$name.'<br>'; 
    echo 'gender='.$gender.'<br>'; 
    if(move_uploaded_file($_FILES['photo']['tmp_name'], UPLOAD_PATH.'/'.$filename)){ 
      echo '<img src="upload/'.$filename.'">'; 
    } 
    ?> 

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

 相关文章:
PHP分页显示制作详细讲解
SSH 登录失败:Host key verification failed
获取IMSI
将二进制数据转为16进制以便显示
获取IMEI
文件下载
贪吃蛇
双位运算符
PHP自定义函数获取搜索引擎来源关键字的方法
Java生成UUID
发送邮件
年的日历图
提取后缀名
在Zeus Web Server中安装PHP语言支持
让你成为最历害的git提交人
Yii2汉字转拼音类的实例代码
再谈PHP中单双引号的区别详解
指定应用ID以获取对应的应用名称
Python 2与Python 3版本和编码的对比
php封装的page分页类完整实例