从仅https服务器获取文件

时间:2012-07-21 15:24:27

标签: php https

我有一个小脚本,它使用curl并从定义的URL中检索特定内容。我在我的localhost上测试了它并且它有效。

现在我必须从我的免费托管中仅从HTTPS网站(以及证书无效,但我知道所有者)中检索数据,但myserver既不支持CURL也不支持file_get_contents("https://other-server.com")功能。顺便说一句,http://other-server.com是不可访问的。

是否有任何方法可以使用HTTPS端口从此服务器获取文件,但使用HTTP协议?或者有一些使用HTTPS的方法,尽管我的服务器不支持它? (这不是我的服务器,我无法访问其配置)

1 个答案:

答案 0 :(得分:2)

试试这个:

<?php
$fp = fsockopen("ssl://other-server.com", 443, $errno, $errstr);
if(!$fp) die($errno. " : " . $errstr);
$send = 
 "GET / HTTP/1.0\r\n".
 "Host:other-server.com\r\n".
 "Accept:text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8\r\n".
 "\r\n";

fwrite($fp, $send);
while(!feof($fp)) {
  echo fread($fp, 512);
}

?>

如果您遇到'ssl transport not available错误消息',请参阅Socket transport "ssl" in PHP not enabled

如果你的主机是外部主机,也许是一个免费的虚拟主机服务,那么你很幸运。最好的选择是弄清楚哪些虚拟主机启用了SSL传输 - 否则使用HTTPS协议根本不符合。< / p>

你的最后一个'出局'是尝试动态地将扩展加载到PHP语言中。您将需要与

匹配的精确扩展名(dll / so)
  1. 主机上的PHP版本(请参阅phpinfo)。
  2. 主机的CPU架构(unix,请参阅passthru("cat /proc/cpuinfo");),例如AMD64,I386 ...
  3. 操作系统'布局',。dll用于Windows主机(IIS等)和.so用于UNIX。
  4. 使用的函数是dl aka dynamic-link来加载库。对于Windows主机,您将需要php_openssl.dllphp_sockets.dll - 而对于UNIX,OOops - 您需要重新编译php核心..

    快乐的黑客攻击:)

    php-man-pages