2011-06-21 23 views
7

PHP'de bir sayfayı proxy etmenin en hızlı ve en kolay yolunu arıyorum. Kullanıcının yönlendirilmesini istemiyorum, sadece betiğimin aynı içeriği, yanıt kodunu ve başlıklarını başka bir uzak URL olarak döndürmesini istiyorum.PHP'de başka bir sayfayı nasıl proxy edinirsiniz

+0

Daha fazla ayrıntıya sahip olabilir miyiz, uzak URL'nin erişileceği gerçek yanıt kodu 302 ise ne olacak? Komut dosyası yönlendirme işlemine mi geçmeli yoksa yeni bir URL ile durum kodunu mı geçirmeli? – dader

+0

İdeal olarak, orijinal URL'ye gittiğiniz gibi% 100 aynı bir şey döndürür. Projem için bu kadar çok ayrıntıya ihtiyacım yok ve file_get_contents işini yapıyor gibi görünüyor. Ama yine de ilginç bir soru olduğunu düşünüyorum –

cevap

10

echo file_get_contents('proxypage'); Bu işe yarar mı?

DÜZENLEME:

İlk cevap biraz kısa oldu ve istediğiniz gibi o başlıklarını idare edecek inanmıyorum.

da yapabilirsiniz Ancak:

function get_proxy_site_page($url) 
{ 
    $options = [ 
     CURLOPT_RETURNTRANSFER => true,  // return web page 
     CURLOPT_HEADER   => true,  // return headers 
     CURLOPT_FOLLOWLOCATION => true,  // follow redirects 
     CURLOPT_ENCODING  => "",  // handle all encodings 
     CURLOPT_AUTOREFERER => true,  // set referer on redirect 
     CURLOPT_CONNECTTIMEOUT => 120,  // timeout on connect 
     CURLOPT_TIMEOUT  => 120,  // timeout on response 
     CURLOPT_MAXREDIRS  => 10,  // stop after 10 redirects 
    ]; 

    $ch = curl_init($url); 
    curl_setopt_array($ch, $options); 
    $remoteSite = curl_exec($ch); 
    $header = curl_getinfo($ch); 
    curl_close($ch); 

    $header['content'] = $remoteSite; 
    return $header; 
} 

Bu size uzak sayfadaki çok sayıda bilgi içeren bir dizi döndürür. $header['content'], web sitesinin içeriğine sahip olacak ve üstbilgiler, $header[header_size], bu üstbilginin uzunluğunu içerecek, böylece bunları kaldırmak için substr'u kullanabilirsiniz.

Ardından, sayfayı proxy için echo ve header kullanmanız yeterlidir.

+0

yanıt kodları ve içerik türlerini de kopyalamak ister misiniz? –

+0

her türlü kullanımı değil, kıvrılma. Şu anda CURLOPT_RETURNTRANSFER için – dynamic

0

Bir sonraki sayfanın html dosyasını kıvrılarak alabilir ve ardından yanıtı yankılayabilirsiniz.

4

Bu işlevselliği elde etmek için PHP cURL işlevleri kullanabilirsiniz:

http://www.php.net/curl

// create a new cURL resource 
$ch = curl_init(); 

// set URL and other appropriate options 
curl_setopt($ch, CURLOPT_URL, 'http://www.example.com/'); 
curl_setopt($ch, CURLOPT_HEADER, 0); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 

// grab URL and pass it to the browser 
$urlContent = curl_exec($ch); 

bu noktadan itibaren, http://www.php.net/curl-getinfo kullanarak yanıt başlık bilgilerini kapmak istiyorum. (Yakalayabileceğiniz birçok değer vardır, hepsi belgelerde listelenmiştir).

// Check if any error occured 
if(!curl_errno($ch)) 
{ 
    $info = curl_getinfo($ch); 
    header('Content-Type: '.$info['content_type']); 
    echo $urlContent; 
} 

CURL tutamacını kapattığınızdan emin olun.

// close cURL resource, and free up system resources 
curl_close($ch); 
+0

Typo uygulamasında sux. Ancak bu, HTTP başlıklarını yanıtın gövdesinde yazdırıyor gibi görünüyor. –

+0

Başlıkların çıkmasını önlemek için CURLOPT_HEADER değerini 0 (kodun düzenini yaptım) olarak değiştirmeyi deneyin. – forgueam

İlgili konular