如何构建PHP / Node代理以在https网站上呈现外部http映像?

时间:2013-06-13 11:03:38

标签: php node.js ssl https proxy

我在https上运行了一个网站。 我必须从没有https但只有http协议的外部服务器(外部域)加载图像。

有没有办法通过PHP或Node处理http图像的代理?所以我可以像这样渲染图像:

<img src="https://domain.com/proxy?url=http://externaldomain.com/image.jpg" />

这个想法是避免在本地保存图像,但只显示它们。

当我尝试在http域内呈现https个已投放的图片时,我收到此控制台消息:

  

https://domain.com/处的页面显示http://externaldomain.com/image.jpg的不安全内容。

同样,地址栏中的SSL(/ https)锁定图标变为灰色。

3 个答案:

答案 0 :(得分:6)

你可以使用node来管理图像,而不是在发送到客户端之前将整个图像加载到内存中(就像file_get_contents在php中那样)。 在streaming中使用此示例中的请求是为了简单:

var https = require('https');
var url = require('url');
var request = require('request');

var server = https.createServer(function (req, res) {
  var queryData = url.parse(req.url, true).query;

  if (queryData.url) {
    var x = request(queryData.url);
    req.pipe(x).pipe(res);
  } else {
    res.writeHead(400, {"Content-Type": "text/plain"});
    res.end("No url");
  }
});

// Listen on port 443
server.listen(443);

答案 1 :(得分:1)

这样的事情应该有效:

<?php
    header('Content-type: image/jpeg;');
    $p = "http://i.imgur.com/jB3xD75.jpg";
    $a = file_get_contents($p);
    echo $a;
?>

答案 2 :(得分:0)

您应首先使用php cURL库下载它们。如果您不想将图像存储在硬盘驱动器上。您可以将它们作为数据URI添加到src属性中。