PHP函數補完:stream_context_create()模擬POST/GET

PHP函數補完:stream_context_create()模擬POST/GET

 PHP流的建立php

服務器君一共花費了94.075 ms進行了3次數據庫查詢,努力地爲您提供了這個頁面。
試試閱讀模式?但願聽取您的建議   
 

有時候,咱們須要在服務器端模擬 POST/GET 等請求,也就是在 PHP 程序中去實現模擬,改怎麼作到呢?或者說,在 PHP 程序裏,給你一個數組,如何將這個數組 POST/GET 到另一個地址呢?固然,使用 CURL 很容易辦到,那麼若是不使用 CURL 庫,又該怎麼辦呢?其實,在 PHP 裏已經有相關的函數實現了,這個函數就是接下來要講的 stream_context_create()html

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

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>';

運行結果爲:swift

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等。就是 建立一個流,再舉一個例子吧:app

01 $context = stream_context_create(array(
02     'http' => array(
03         'method'  => 'POST',
04         'header'  => sprintf("Authorization: Basic %s\r\n",base64_encode($username.':'.$password)).
05         "Content-type: application/x-www-form-urlencoded\r\n",
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。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()前使用
相關文章
相關標籤/搜索