2016-02-21 55 views
0

我有一個頁面A,它具有位置報頭重定向到網頁BPHP捲曲從頁面獲取信息與重定向

在網頁B如果沒有授權,則有一個登錄表單印刷,如果登錄然後使用GET參數CODE重定向回頁面A. 頁中的代碼:

if (!$_GET['code']) { 
header('Location: B'); 
} 

頁A使用此代碼從服務器獲取再次尋址到網頁B的信息,但這次捲曲。 頁中的代碼:

$ch = curl_init(); 
.. 
curl_opt($ch, CURLOPT_URL, "B/token?code={SOMECODE}"); 
.. 
$data = curl_exec($ch); 
curl_close($ch); 
$result = json_decode($data); 

現在我JSON數據,我繼續在頁面A.使用頁中的代碼:

$ch = curl_init(); 
.. 
curl_opt($ch, CURLOPT_URL, "B/method/?data={SOMEDATA_FROM_$result}"); 
.. 
$result = curl_exec($ch); 
curl_close($ch); 
$response = json_decode($result); 

$json = [ 
'key1' => $response->value1, 
'key2' => $response->value2, 
]; 

echo json_encode($json); 

第A所以,現在我已經印刷JSON數據

這裏是頁面C,我使用curl從頁面A獲取這個JSON數據,但是頁面A重定向到了頁面B,我們必須授權並獲取GET參數代碼。所以我用curl去做。 頁的C代碼:從網頁B的授權表的

$ch = curl_init(); 

curl_setopt($ch, CURLOPT_VERIFYPEER, false); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); 
curl_setopt($ch, CURLOPT_HEADER, false); 
curl_setopt($ch, CURLOPT_URL, 'A'); 

$result = curl_exec($ch); 

curl_close($ch); 

var_dump($result); 

而且$result返回的HTML代碼,即使林的授權,但如果我用echo它開始無限刷新網頁只用var_dump()做的。

如何從C頁使用curl的頁面A​​獲得正確的數據?

+0

好了,所以結構是錯誤的。我想出了在頁面C上不使用curl,只是從頁面C到頁面A的簡單鏈接,GET參數作爲到頁面C的後向重定向鏈接。現在我只是授權頁面B上的用戶,將數據發送到頁面A,做所有我需要的東西,然後用POST請求發送數據到頁面C. –

回答

0

是頁面A和頁面C在同一臺服務器上?如果是這樣,請在頁面C中設置一個條件,如果客戶端ip = 127.0.0.1,則跳過登錄過程並響應所需的值。

0

好的,所以結構是錯誤的。我添加時尚,讓你看到它現在如何運作。

enter image description here

我想出了不使用第C,從頁面C到網頁A只是一個簡單的鏈接捲曲,用GET參數作爲回重定向網頁鏈接C.現在我只授權用戶上頁面B,將數據發送到頁面A,完成我需要的所有內容,並使用POST請求將數據發送到頁面C.

它是如何工作的? - 很簡單,當我通過GET請求發送重定向uri從C到A時,我開始在A頁上進行會話。現在我在B頁上進行授權(頁面B對C頁一無所知),然後返回頁面A,在那裏我擁有與授權響應一起工作所需的所有功能,獲取所有需要的數據,並將其作爲json回顯。在和我只是張貼所有的用戶數據腳本頁C上。

所以現在我有客戶端網站C上的所有信息。我可以自由地做任何我需要的東西。

因此,代碼是這樣的:

----- Page C ----- 

<a href="pageA.php?redirect_uri=pageC.php">Login</a> 

----- Page A ----- 

session_start(); 

$redirect = isset($_GET['redirect_uri']) ? $_GET['redirect_uri'] : null; 
$code = isset($_GET['code']) ? $_GET['code'] : null; 

if ($code) { 
$redirect = $_SESSION['redirect']; 
session_destroy(); 

// The simple way to send data back with GET request 
header("Location:{$redirect}?code={$code}"); 

} 

if (!$redirect) { 
throw new Exception('Redirect URI is required'); 
} 

$_SESSION['redirect'] = $redirect; 

header('Location: PageB.php');