سؤال

أرغب في تنزيل صفحة من الويب ، يُسمح بذلك عندما تستخدم متصفحًا بسيطًا مثل Firefox ، ولكن عندما أستخدم "file_get_contents" يرفض الخادم ورد أنه يفهم الأمر ولكن لا يسمح بهذه التنزيلات.

اذا مالعمل؟ أعتقد أنني رأيت في بعض البرامج النصية (على Perl) طريقة لجعل البرنامج النصي مثل المتصفح الحقيقي من خلال إنشاء وكيل مستخدم وملفات تعريف الارتباط ، مما يجعل الخوادم تعتقد أن البرنامج النصي الخاص بك هو متصفح ويب حقيقي.

هل لدى أي شخص فكرة عن هذا ، كيف يمكن القيام به؟

هل كانت مفيدة؟

المحلول

استخدم حليقة.

<?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);     
?>

(من http://uk.php.net/manual/en/curl.examples-basic.php)

نصائح أخرى

نعم ، حليقة جيدة جدًا في الحصول على محتوى الصفحة. أستخدمه مع فصول مثل Domdocument و Domxpath لطحن المحتوى إلى نموذج قابل للاستخدام.

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;


                }

هذا الأخير هو جزء من فئة تخلص من البيانات من delicious.com . ليس قانوني جدا على الرغم من.

تأخذ هذه الإجابة تعليقك إلى إجابة ريتش في الاعتبار.

من المحتمل أن يكون الموقع يتحقق مما إذا كنت مستخدمًا حقيقيًا أم لا باستخدام مرجع HTTP أو سلسلة وكيل المستخدم. حاول ضبطها على حليقة:

 //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');

هناك طريقة أخرى للقيام بذلك (على الرغم من أن الآخرين أشاروا إلى طريقة أفضل) ، وهي استخدام وظيفة php's fopen () ، مثل ذلك:

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

إنه مفيد بشكل خاص إذا لم يكن حليقة متوفرة.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top