PHP Все опции, найденные для чтения веб-страницы, приводят к ошибке в моем случае

Я много искал и пытался найти ответ на эту проблему, в том числе пробовал много ответов на очень похожие вопросы, задаваемые здесь на Stackru, которые, как я читал, действительно хорошо работали для многих пользователей, но не для меня, по причинам, которые я пока не знаю, но надеюсь найти ответ здесь.

Моя проблема в том, что по какой-то причине мне оказывается невозможным прочитать содержимое любого Crypto-JS со страниц GoogleCode в PHP (например, http://crypto-js.googlecode.com/svn/tags/3.1.2/build/rollups/sha512.js). Я начал с основного file_get_contents и когда это не удалось, поиск других вариантов в Интернете, что привело к следующему базовому классу:

<?php
include 'snoopy.class.php';

class StreamReader {

    public static $agent = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.0.3705; .NET CLR 1.1.4322)";
    static $proxy = "http://proxy.whoisaaronbrown.com/proxy/";

    public static function curlcontents($path) {
        if(!function_exists('curl_version')) { return false; }
        $handle = curl_init();
        if(!$handle) { return false; }
        $timeout = 30;

        curl_setopt($handle, CURLOPT_URL, $path);
        curl_setopt($handle, CURLOPT_CONNECTTIMEOUT, $timeout);
        curl_setopt($handle, CURLOPT_SSL_VERIFYPEER, false);
        curl_setopt($handle, CURLOPT_VERBOSE, true);
        curl_setopt($handle, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($handle, CURLOPT_USERAGENT, StreamReader::$agent);

        $lines_string = curl_exec($handle);
        curl_close($handle);
        return $lines_string;
    }

    public static function sockcontents($path, $port = 80) {
        $handle = fsockopen($path, $port, $errno, $errstr, 30);
        if (!$handle) {
            echo " /* <b>$errstr ($errno)</b> */ "; return false;
        } else {
            $lines_string = "";
            $out = "GET / HTTP/1.1\r\n";
            $out .= "Host: $path\r\n";
            $out .= "Connection: Close\r\n\r\n";
            fwrite($handle, $out);
            $data = false;
            while (!feof($handle)) {
                $data = fgets($handle, 128);
                if($data === false) { break; }
                $lines_string .= $data;
            }
            fclose($handle);
            if($lines_string == "" && $data === false) { return false; }
            return $lines_string;
        }
    }

    public static function readcontents($path) {
        if(!ini_get('allow_url_fopen')) { return false; }

        // fopen opens webpage in Binary
        // $handle = fopen($path,"rb");
        $handle = fopen($path,"r");
        if(!$handle) { return false; }

        $lines_string = "";
        $data = fread($handle,1024);
        do {
            if($data === false || strlen($data) == 0) {
                break;
            }
            $lines_string .= $data;
            $data = fread($handle,1024);
        } while(true);

        fclose($handle);
        if($lines_string == "" && $data === false) { return false; }
        return $lines_string;
    }

    public static function browsecontents($path) {
        $snoopy = new Snoopy();
        if($snoopy->fetch($path)) { return $snoopy->results; }
        else { echo " /* <b>error fetching document: " . $snoopy->error . "</b> */ "; return false; }
    }
}
?>

Как вы видите, я скопировал ответы на "веб-сайт - Как читать веб-страницу в PHP", "php - file_get_contents() не удалось открыть поток" & "php - почему file_get_contents() возвращает" не удалось открыть поток: HTTP-запрос не удалось!"?", "fsockopen - PHP подключается к внешнему ip с портом" и другие дополнительные решения, найденные здесь в Stackru, а также от SuperUser, PHP Freaks и других, которые я нашел в сети.

(Кстати, поскольку у меня недостаточно кредитов или чего-то еще, ТАК не позволяю мне публиковать более 2 ссылок, и поэтому спасибо пользователю bmla за дешифрование этого поста)

Мой код находится на внешнем хосте, который я не могу контролировать, но function_exists('curl_version') возвращает истину, а также ini_get('allow_url_fopen') однако http_get дает неопределенную ошибку функции.

Я перепробовал все функции на себе, а также в сочетании друг с другом и с другими методами, которые я нашел или мог придумать, среди которых перенаправление через прокси-сервер Аарона Брауна ($trythispathforachange = $proxy . $path;). К сожалению, все функции и комбинации, которые я опробовал, приводят либо к "ошибке соединения", либо к ошибке "тайм-аут соединения", а в случае Snoopy он говорит мне, что tcp://соединение сгорело. Кроме того, для https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js все работает без нареканий, поэтому я думаю, что код должен быть правильным до сих пор.

Но, по-видимому, для googlecode.com все еще есть что-то, что мешает ему дать мне ответ, в отличие от любого браузера на основе человеческого интерфейса.

Заранее спасибо за любую помощь или предоставленную информацию!

Клаас

0 ответов

Другие вопросы по тегам