我一直在寻找并尝试找到这个问题的答案,包括尝试在StackOverflow上提到的非常相似的问题的许多答案,正如我读到的那样,对很多用户来说效果非常好,但不适合我,由于我还不知道的原因,但希望在这里找到答案。
我的问题是,由于某些原因,我无法从PHP中的GoogleCode页面(如http://crypto-js.googlecode.com/svn/tags/3.1.2/build/rollups/sha512.js)中读取任何Crypto-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; }
}
}
?>
如您所见,我将答案复制到"website - How to read a web page in PHP","php - file_get_contents() failed to open stream"&amp;我在StackOverflow上找到了"php - Why file_get_contents() returns "failed to open stream: HTTP request failed!"?","fsockopen - PHP connect to external ip with port"和其他可选解决方案,以及我在网上找到的SuperUser,PHP Freaks和其他解决方案。
(在旁注,因为我没有足够的学分或其他东西,所以不允许我发布超过2个链接,所以感谢用户 bmla 去除这篇文章)
我的代码位于我无法控制的外部主机上,但function_exists('curl_version')
返回true,而ini_get('allow_url_fopen')
则返回true,但http_get
给出了未定义的函数错误。
我已经尝试了所有的功能,以及相互结合以及我发现或想到的其他技术,其中包括通过Aaron Brown的代理($trythispathforachange = $proxy . $path;
)进行重定向。遗憾的是,我尝试过的所有函数和组合都会导致“连接失败”或“连接超时”错误,而在Snoopy的情况下,它会告诉我tcp://
- 连接变坏了。此外,对于https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js,一切都运行良好,所以我认为代码必须是正确的。
但显然对于googlecode.com而言,与任何基于人机界面的浏览器相比,仍有一些东西阻止它对我产生回应。
提前感谢您提供的任何帮助或信息!
克拉斯