Bir değişkene bir web sayfası almak için PHP nasıl kullanılır

4 Cevap php

Ben web bir sayfa indirmek istiyorsanız, bu Firefox gibi basit bir tarayıcı kullanırken yapmak için izin veriyor, fakat ben "file_get_contents" kullandığınızda, sunucu reddediyor ve bu komutu anlar ancak böyle indirmeler izin vermez söyler.

Peki ne yapmalı? Ben (Perl) bazı komut dosyaları sunucuları komut gerçek bir web tarayıcısı olduğunu düşündürüyor bir kullanıcı ajan ve çerezleri, oluşturarak gerçek bir tarayıcı gibi komut dosyası yapmak için bir yol gördüm.

Herkes bu konuda bir fikri var mı, nasıl yapılabilir?

4 Cevap

CURL kullanın.

<?php
        // create curl resource
        $ch = curl_init();

        // set url
        curl_setopt($ch, CURLOPT_URL, "example.com");

        //return the transfer as a string
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);


        // set the UA
        curl_setopt($ch, CURLOPT_USERAGENT, 'My App (http://www.example.com/)');

        // Alternatively, lie, and pretend to be a browser
        // curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)');

        // $output contains the output string
        $output = curl_exec($ch);

        // close curl resource to free up system resources
        curl_close($ch);     
?>

(Gönderen http://uk.php.net/manual/en/curl.examples-basic.php)

Evet, CURL sayfa içeriği almak oldukça iyidir. Ben bir durunda içeriği öğütmek için DOMDocument ve DOMXPath gibi sınıfları ile kullanabilirsiniz.

function __construct($useragent,$url)
    {
    	$this->useragent='Firefox (WindowsXP) - Mozilla/5.0 (Windows; U; Windows NT 5.1; en-GB; rv:1.8.1.6) Gecko/20070725 Firefox/2.0.0.'.$useragent;
    	$this->url=$url;


    	$ch = curl_init();
    	curl_setopt($ch, CURLOPT_USERAGENT, $useragent);
    	curl_setopt($ch, CURLOPT_URL,$url);
    	curl_setopt($ch, CURLOPT_FAILONERROR, true);
    	curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
    	curl_setopt($ch, CURLOPT_AUTOREFERER, true);
    	curl_setopt($ch, CURLOPT_RETURNTRANSFER,true);
    	curl_setopt($ch, CURLOPT_TIMEOUT, 10);
    	$html= curl_exec($ch);
    	$dom = new DOMDocument();
    	@$dom->loadHTML($html);
    	$this->xpath = new DOMXPath($dom);
    }
...
public function displayResults($site)
$data=$this->path[0]->length;
    for($i=0;$i<$data;$i++)
    {	
    $delData=$this->path[0]->item($i);

    //setting the href and title properties	
$urlSite=$delData->getElementsByTagName('a')->item(0)->getAttribute('href'); 
				$titleSite=$delData->getElementsByTagName('a')->item(0)->nodeValue;

    //setting the saves and additoinal
				  $saves=$delData->getElementsByTagName('span')->item(0)->nodeValue;
    if ($saves==NULL)
    {
    	$saves=0;
    }

    //build the array
    $this->newSiteBookmark[$i]['source']='delicious.com';
    $this->newSiteBookmark[$i]['url']=$urlSite;
    $this->newSiteBookmark[$i]['title']=$titleSite;
    $this->newSiteBookmark[$i]['saves']=$saves;


    			}

İkincisi olsa çok hukuki değil delicious.com veri sıyırıp bir sınıfın bir parçasıdır. Olduğunu.

Bu cevap akılda Rich'in yanıt için yorum alır.

Site muhtemelen HTTP referer veya kullanıcı aracısı dizesini kullanarak bir gerçek kullanıcı olup olmadığını kontrol ediyor. Lütfen kıvrılma için bu ayarı deneyin:

 //pretend you came from their site already
curl_setopt($ch, CURLOPT_REFERER, 'http://domainofthesite.com');
 //pretend you are firefox 3.06 running on windows Vista
curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.9.0.6) Gecko/2009011913 Firefox/3.0.6');

(Diğerleri daha iyi bir yolu işaret olsa) bunu yapmanın başka bir yolu, bu yüzden gibi, PHP'nin fopen () işlevi kullanmak için:

$handle = fopen("http://www.example.com/", "r");//open specified URL for reading

CURL mevcut değilse özellikle faydalıdır.