1

我有一个小脚本,它使用 curl 并从定义的 url 中检索特定内容。我在本地主机上对此进行了测试,并且有效。

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

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

4

1 回答 1

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 传输不可用错误消息”,请参阅PHP 中的 Socket transport "ssl" not enabled

如果您的主机是外部主机并且可能是免费的虚拟主机服务,那么您的运气就很差了。最好的选择是找出哪些虚拟主机启用了 SSL 传输 - 否则使用 HTTPS 协议根本不符合要求。

您最后的“出局”是尝试将扩展动态加载到 PHP 语言中。您将需要匹配的精确扩展名 (dll/so)

  1. 主机上的 PHP 版本(参见 phpinfo)。
  2. 主机的 CPU 架构(unix,见passthru("cat /proc/cpuinfo");),例如 amd64,i386..
  3. 操作系统“布局”,.dll 用于 Windows 主机(IIS 等),.so 用于 UNIX。

使用的功能是dl加载库的又名动态链接。对于 Windows 主机,您将需要php_openssl.dll-php_sockets.dll反过来对于 UNIX,OOops - 您需要重新编译 php 核心。

快乐的黑客:)

php 手册页

于 2012-07-21T15:42:39.307 回答