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

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

Моя проблема в том, что по какой-то причине для меня невозможно прочитать содержимое любого 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 с портом» и другие дополнительные решения, найденные здесь в StackOverflow, а также от 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

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …