2013-09-16 32 views
0

Есть ли способ сделать перенаправление в PHP с помощью curl? Я посмотрел несколько примеров, но ни один из них не работает в моем случае. Мне нужно войти в url1, а затем перенаправить меня на url2. (url_1 - это сайт моей IP-камеры, url_2 - это моя страница, которая содержит iframe url_1, чтобы увидеть содержимое url_1 на моей странице, требуется проверка подлинности)Как сделать curl php redirect?

Пожалуйста, проверьте мой код и скажите мне, где я сделал не так, большое спасибо!

<? 
$url = 'url_1'; 
$username = 'admin'; 
$password = '888888'; 

$ch = curl_init(); 

curl_setopt($ch, CURLOPT_URL, $url); 
curl_setopt($ch, CURLOPT_HEADER, true); 
curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.1) Gecko/20061204 Firefox/2.0.0.1"); 
curl_setopt($ch, CURLOPT_REFERER, "url_2"); 
curl_setopt($ch, CURLOPT_HTTPHEADER, Array("Content-Type:application/x-www-form-urlencoded")); 
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE); 
curl_setopt($ch, CURLOPT_USERPWD, "$username:$password"); 
curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC); 

$a = curl_exec($ch); 


$info = curl_getinfo($ch); 
curl_close($ch); 
print_r($info); 

$headers = explode("\n",$a); 
$redir = $url; 
// loop through the headers and check for a Location: str 
$j = count($headers); 
for($i = 0; $i < $j; $i++){ 
// if we find the Location header strip it and fill the redir var  
if(strpos($headers[$i],"Location:") !== false){ 
     $redir = trim(str_replace("Location:","",$headers[$i])); 
     break; 
    } 
} 
// do whatever you want with the result 
echo $redir; 
?> 

Я также напечатать $ информацию здесь:

Array ( 
[url] => url_1 
[content_type] => text/html 
[http_code] => 200 
[header_size] => 180 
[request_size] => 288 
[filetime] => -1 
[ssl_verify_result] => 0 
[redirect_count] => 0 
[total_time] => 0.016 
[namelookup_time] => 0 
[connect_time] => 0 
[pretransfer_time] => 0 
[size_upload] => 0 
[size_download] => 6379 
[speed_download] => 398687 
[speed_upload] => 0 
[download_content_length] => 6379 
[upload_content_length] => 0 
[starttransfer_time] => 0.016 
[redirect_time] => 0 
[certinfo] => Array () 
) 

и $ REDIR является: URL_1

+0

Возможный дубликат [Сделать curl follow redirects?] (Http://stackoverflow.com/questions/3519939/make-curl-follow-redirects) –

+0

У вас уже включен режим «FOLLOWLOCATION», поэтому скручивание будет следовать любые переадресации, которые ударил сервер, происходят. –

+0

@ Marc B, устанавливающий FOLLOWLOCATION на false, исправит проблему? Я пробовал и не работал –

ответ

0

Я думаю, что вы путаете разные темы здесь. Если вы выдаете запрос на завивание на стороне сервера, ничего не произойдет с зарегистрированным клиентом. Если вы хотите перенаправить зарегистрированный клиент на место, вам нужно выпустить заголовок HTTP Redirect. Это произойдет с

Header("Location: http://domain.com/page.php"); 

директива. Ничего общего со скручиванием как таковым.

Вы можете, однако, сначала выполнить запрос с curl на другой ресурс (например, ваш url1), а затем использовать PHP для перенаправления на url2, содержащий ваш iframe. Что-то вроде Header("Location: $redir"); в вашем коде.