在禁用 curl 的主机上使用 curl 是否有任何替代方法?
4 回答
要通过 HTTP 获取内容,首先,您可以尝试使用file_get_contents
; 您的主机可能没有禁用 http:// 流:
$str = file_get_contents('http://www.google.fr');
位这可能被禁用(见allow_url_fopen
);有时是...
如果它被禁用,您可以尝试使用fsockopen;手册中给出的示例说明了这一点(引用):
$fp = fsockopen("www.example.com", 80, $errno, $errstr, 30);
if (!$fp) {
echo "$errstr ($errno)<br />\n";
} else {
$out = "GET / HTTP/1.1\r\n";
$out .= "Host: www.example.com\r\n";
$out .= "Connection: Close\r\n\r\n";
fwrite($fp, $out);
while (!feof($fp)) {
echo fgets($fp, 128);
}
fclose($fp);
}
不过,考虑到它非常低级(您正在直接使用套接字,并且 HTTP 协议并不是那么简单),使用使用它的库将使您的生活更轻松。
http://www.phpclasses.org充满了这些“替代品”,你可以试试这个:http ://www.phpclasses.org/browse/package/3588.html
此线程中的所有答案都提供了有效的解决方法,但您应该记住一件事。无论出于何种原因,您的主机都认为通过 PHP 代码从您的 Web 服务器发出 HTTP 请求是“坏事”,因此禁用(或未启用)curl 扩展。如果您找到解决方法并且他们注意到他们会以其他方式阻止您的请求,那么这是一个非常好的机会。除非有政治原因迫使您使用此特定主机,否则如果需要发出 http 请求,请认真考虑将您的应用程序/页面移至其他地方。
您可以使用 PHP 编写一个普通的 curl 服务器脚本并将其放置在启用 curl 的主机上,当您需要 curl 时 - 您可以在需要时从无 curl 的机器上进行客户端调用,它会返回您需要的数据。可能是一个奇怪的解决方案,但曾经很有帮助。