1. 程式人生 > 程式設計 >PHP 請求上下文相關總結

PHP 請求上下文相關總結

我們首先來了解下什麼是上下文。在我們寫文章,寫句子時,都會考慮一個觀點或者內容的前後邏輯,轉承啟合,而在這個觀點前後的內容就可以看成是它的上下文內容。它包含了語境的意味在裡面,其實程式碼世界中的上下文也是一樣的意思,本身 Context 這個單詞就是環境、背景的意思。

接下來,我們來說說請求上下文又是什麼呢?比如說我們要使用php來請求一個連結地址,通常我們會使用 curl 來進行請求,但是 curl 的配置其實是比較複雜的,所以我們在簡單使用的情況下會使用 file_get_contents() 這種函式來快捷地請求連結。不過,可能PfogJDrB很多人並不知道或者說沒怎麼使用過它的上下文引數。PfogJDrB

其實,使用了上下文引數之後,file_get_contents() 不僅可以提交 POST 請求,還可以定義各種請求頭內容。這些東西,就是一個請求的上下文,也就是它的執行環境和背景。

首先,我們定義一個服務端,在這裡只是輸出 \_G程式設計客棧ET 和 和_POST 裡面的內容。同時,我們還列印了 $_SERVER 來看看請求頭是否獲取到了。

print_r($_SERVER);

echo 'GET INFO',PHP_EOL;
foreach ($_GET as $k => $v) {
    echo $k,': ',$v,PHP_EOL;
}

echo PHP_EOL,PHP_EOL;
echo 'POST INFO',PHP_EOL;
foreach ($_POST as $k => $v) {
    echo $k,PHP_EOL;
}

接下來,在我們的測試程式碼中,使用 file_get_contents() 來進行 POST 提交。

$postdata = http_build_query(
    [
        'var1' => 'some content','var2' => 'doh',]
);

$opts = [
    'http' => [
        'method' => 'POST','header' => 'Content-type: application/x-www-form-urlehttp://www.cppcns.comncoded','content' => $postdata,],];

$context = stream_context_create($opts);
$result = file_get_contents('http://localhost:8088/?a=1',false,$context);
print_r($result);
var_dump($http_response_header);

在這裡,我們只是用到了 stream_context_create() ,就能夠輕鬆地建立一個請求的上下文環境了。stream_context_create() 是建立上下文環境的函式,它接收的引數是一個選項陣列,裡面用於定義當前請求的相關選項。注意,我們這裡其實定義的是 http/https 相關的選項,它還可以定義 ftp 、 socket 等相關的請求協議選項。

在使用 file_get_contents() 函式請求遠端地址後,我們可以在 $http_response_header 變數內獲取到請求返回的響應頭資訊。而且這個變數是會定義在當前的區域性作用域下,不用擔心全域性作用域汙染的問題。

非常簡單的方式就可以實現 POST 請求了吧,另外我們還可以使用 fopen() 函式來實現類似的效果,不過獲取 body 和響應應資訊時的方式就不同了。

$url = "http://localhost:808程式設計客棧8/?a=1";

$opts = [
    'http' => [
        'method' => 'GET','max_redirects' => '0','ignore_errors' => '1',];

$context = stream_context_create($opts);
$stream = fopen($url,'r',$context);

// 返回響應頭
var_dump(stream_get_meta_data($stream));

// 返回內容
var_dump(stream_get_contents($stream));
fclose($stream);

在這段程式碼中,我們使用 stream_get_meta_data() 函式來獲得響應頭,使用 stream_get_contents() 來獲得響應的內容(body)。這樣其實就真的和 curl 的效果差不多了,而且最主要的是,當前這種寫法更簡單方便。

從上面的程式碼中我們可以看出,這種上下文相關的函式都是 Stream 型別的函式,也就是流函式。它們是專門用來處理各種資料的,包括但不限於檔案中的、網路上的、壓縮檔案以及其他一些操作的資料。在將來的學習中,我們還會接觸到其它的內容。今天的學習,其實是流的網路資料處理中的一小部分內容,大家先消化消化吧!

測試程式碼: github.com/zhangyue050…

以上就是PHP 請求上下文相關總結的詳細內容,更多關於PHP 請求上下文的資料請關注我們其它相關文章!