zoukankan      html  css  js  c++  java
  • PHP函数补完:stream_context_create()模拟POST/GET

    PHP函数补完:stream_context_create()模拟POST/GET

     PHP流的创建

    服务器君一共花费了94.075 ms进行了3次数据库查询,努力地为您提供了这个页面。
    试试阅读模式?希望听取您的建议  
     

    有时候,我们需要在服务器端模拟 POST/GET 等请求,也就是在 PHP 程序中去实现模拟,改怎么做到呢?或者说,在 PHP 程序里,给你一个数组,如何将这个数组 POST/GET 到另外一个地址呢?当然,使用 CURL 很容易办到,那么如果不使用 CURL 库,又该怎么办呢?其实,在 PHP 里已经有相关的函数实现了,这个函数就是接下来要讲的 stream_context_create()

    直接 show you the code,这是最好的方法:

    01 $data array(
    02     'foo'=>'bar',
    03     'baz'=>'boom',
    04     'site'=>'www.nowamagic.net',
    05     'name'=>'nowa magic');
    06      
    07 $data = http_build_query($data);
    08  
    09 //$postdata = http_build_query($data);
    10 $options array(
    11     'http' => array(
    12         'method' => 'POST',
    13         'header' => 'Content-type:application/x-www-form-urlencoded',
    14         'content' => $data
    15         //'timeout' => 60 * 60 // 超时时间(单位:s)
    16     )
    17 );
    18  
    20 $context = stream_context_create($options);
    21 $result file_get_contents($url, false, $context);
    22  
    23 echo $result;

    http://www.nowamagic.net/test2.php 的代码为:

    1 $data $_POST;
    2  
    3 echo '<pre>';
    4 print_r( $data );
    5 echo '</pre>';

    运行结果为:

    1 Array
    2 (
    3     [foo] => bar
    4     [baz] => boom
    5     [site] => www.nowamagic.net
    6     [name] => nowa magic
    7 )

    一些要点讲解:

    1. 以上程序用到了 http_build_query() 函数,如果需要了解,可以参看 PHP函数补完:http_build_query()构造URL字符串

    2. stream_context_create() 是用来创建打开文件的上下文件选项的,比如用POST访问,使用代理,发送header等。就是 创建一个流,再举一个例子吧:

    01 $context = stream_context_create(array(
    02     'http' => array(
    03         'method'  => 'POST',
    04         'header'  => sprintf("Authorization: Basic %s ",base64_encode($username.':'.$password)).
    05         "Content-type: application/x-www-form-urlencoded ",
    06         'content' => http_build_query(array('status' => $message)),
    07         'timeout' => 5,
    08     ),
    09 ));
    10 $ret file_get_contents('http://twitter.com/statuses/update.xml', false,$context);

    3. stream_context_create创建的上下文选项即可用于流(stream),也可用于文件系统(file system)。对于像 file_get_contents、file_put_contents、readfile直接使用文件名操作而没有文件句柄的函数来说更有用。stream_context_create增加header头只是一部份功能,还可以定义代理、超时等。这使得访问web的功能不弱于curl。

    4. stream_context_create() 作用:创建并返回一个文本数据流并应用各种选项,可用于fopen(),file_get_contents()等过程的超时设置、代理服务器、请求方式、头信息设置的特殊过程。

    5. stream_context_create 还能通过增加 timeout 选项解决file_get_contents超时处理:

    01 $opts array(
    02     'http'=>array(
    03     'method'=>"GET",
    04     'timeout'=>60,
    05   )
    06 );
    07 //创建数据流上下文
    08 $context = stream_context_create($opts);
    09  
    10 $html =file_get_contents('http://www.nowamagic.net', false, $context);
    11  
    12 //fopen输出文件指针处的所有剩余数据:
    13 //fpassthru($fp); //fclose()前使用
  • 相关阅读:
    Samba 4.0 RC3 发布
    SymmetricDS 3.1.7 发布,数据同步和复制
    Express.js 3.0 发布,Node.js 的高性能封装
    GIFLIB 5.0.1 发布,C语言的GIF处理库
    jQuery UI 1.9.1 发布
    SVN Access Manager 0.5.5.14 发布 SVN 管理工具
    DynamicReports 3.0.3 发布 Java 报表工具
    HttpComponents HttpClient 4.2.2 GA 发布
    AppCan 2.0 正式发布,推移动应用云服务
    Ruby 2.0 的新功能已经冻结
  • 原文地址:https://www.cnblogs.com/u0mo5/p/4645866.html
Copyright © 2011-2022 走看看