2016-10-20 148 views
1

即時通訊相當新的PHP。目前我正面臨着關於php curl post和重定向的問題。我寫了很多代碼來連接跨域api。在這個API中,響應會將我的頁面重定向到另一個頁面。PHP CURL重定向

所以,現在我面對的是我無法遵循API響應。 這意味着我的PHP腳本,我的捲曲已收到重定向頁面的網頁內容,但我的網頁仍然存在。

我可以知道php curl是否可以遵循API重定向?

有沒有人知道如何解決這個問題?

下面將是我的代碼。

$url = "http://www.google.com.my"; //example this is an API 
$ch = curl_init(); 
curl_setopt ($ch, CURLOPT_URL, $url); 
curl_setopt ($ch, CURLOPT_TIMEOUT, 60); 
curl_setopt ($ch, CURLOPT_FOLLOWLOCATION, true); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
curl_setopt ($ch, CURLOPT_REFERER, $url); 
curl_setopt ($ch, CURLOPT_POSTFIELDS, $data_string); 
curl_setopt ($ch, CURLOPT_POST, true); 
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json','Content-Length: ' . strlen($data_string))); 

$result = curl_exec($ch); 
$response = curl_getinfo($ch); 
curl_close($ch); 

在$ result中,我收到了API重定向頁面。但它只是網頁內容。

+1

提供你的代碼,你都試過了。 – AHJeebon

+0

'$ data_string'的值是什麼? 而[http://www.google.com.my]沒有提供任何網址。 – AHJeebon

+0

$ data_string將被設置爲json中的參數來連接API。作爲例子,url只是api的一個樣本。 –

回答

2

這裏有兩個HTTP請求。

  1. 從瀏覽器到你的PHP
  2. 從PHP的API

兩個請求是獨立的。他們有自己的迴應,他們之間沒有聯繫,你不創造自己。

如果響應2說「重定向」,那麼這不會自動做出響應1也說「重定向」。

爲了做到這一點:

  • 打開CURLOPT_FOLLOWLOCATION 關閉
  • 在PHP讀取從響應到2
  • 問題Location頭(與header()功能)Location頭,使其出現在響應中1

這假設您的請求的響應直接顯示在瀏覽器中。即您在瀏覽器中提交表單或類似內容。

如果請求1是一個Ajax請求,那麼重定向它只會導致重定向頁面被傳遞給JavaScript。它不會在瀏覽器中加載新頁面。如果你想告訴JavaScript來加載,然後一個新的頁面:

  • 打開CURLOPT_FOLLOWLOCATION 關閉
  • 從響應到2
  • 放進了響應的體1閱讀Location頭(您可能會被編碼爲JSON)
  • 閱讀你的JavaScript響應,並使用它來設置location.href一個新值
+0

但我現在面臨的是跨域API將自動重定向到另一頁的頁面。如果根據您剛纔介紹的內容,使用header()將在訪問控制允許來源上崩潰。 –

+0

@yewpan - 這個答案有兩個一半。第二個涉及JavaScript案例。將'location.href'設置爲新值不會導致交叉原點錯誤。 – Quentin

+0

但每次加載到api中都需要在json中發佈一些參數。這就是爲什麼我混淆 –