2015-03-19 201 views
0

我已經閱讀了一些關於同一問題的其他問題,並嘗試了那裏的捲曲示例。但是,這些示例不適用於此特定網址http://www.prisjakt.no/redirect.php?prisid=182556713。我所得到的是與重定向相同的鏈接。PHP獲取重定向URL

您是否有解決方案來獲取後續鏈接的url,在這種情況下是http://www.siba.no/tv-lyd-bilde/hodetelefoner/lukkede-hodetelefoner/sennheiser-momentum-109434

使用Guzzle的解決方案也可以。

謝謝!

編輯:問題似乎是重定向是通過JS,而不是一個頭。

+0

Guzzle是一個HTTP客戶端,因此依賴於正確的HTTP頭文件來作爲例外。如您所述,重定向是通過JS完成的 - 因此您需要解析結果並手動提取目標URL。 – Hirnhamster 2015-04-12 11:01:25

回答

0

cURLtrueCURLOPT_FOLLOWLOCATION選項遵循重定向(S):

curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); 

對於狂飲,根據their doc

默認情況下,暴飲會自動跟隨使用重定向 大多數網絡瀏覽器使用的非RFC兼容實現。這意味着 重定向POST請求之後是GET請求。您 可以通過啓用嚴格模式的請求的 參數對象強制遵守RFC:

// Set per request 
$request = $client->post(); 
$request->getParams()->set('redirect.strict', true); 

// You can set globally on a client so all requests use strict redirects 
$client->getConfig()->set('request.params', array(
    'redirect.strict' => true 
)); 

默認情況下,狂飲將高達重定向到5次投擲 Guzzle\Http\Exception\TooManyRedirectsException之前。可以使用一個請求對象的redirect.max參數 下該值升高或:

$request->getParams()->set('redirect.max', 2); 
+0

這就是我已經做的。但它不起作用(捲曲方法) – Strernd 2015-03-19 11:13:01

2
狂飲

確實爲Redirects in Requests

提供一些配置設置你可以「陷阱」重定向通過添加Event Listener到BeforeEvent像這樣:

$request = $client->createRequest('GET', $url); 
$request->getEmitter()->on('before', function (BeforeEvent $event) { 
    // do something with the event. 
}); 
$response = $client->send($request); 

然後偵聽器內可以通過調用抓住新的請求的URL:

$event->getRequest()->getUrl() 

例如:

$client = new GuzzleHttp\Client(); 

$request = $client->createRequest('GET', 'http://www.google.com'); 
$request->getEmitter()->on('before', function (GuzzleHttp\Event\BeforeEvent $e) { 
    echo $e->getRequest()->getUrl() . PHP_EOL; 
}); 
$response = $client->send($request); 

結果: