2014-10-31 78 views
0

我的Webapp正在使用https连接/ ssl证书运行。我需要向用户展示图片。我通过API请求获取图片的链接,然后将它们链接起来。可悲的是,图片地址是http,所以浏览器显示网站上存在不安全的部分,这不能是...在https连接中加载的Http内容

我可以下载图片并链接到正确的图片,但我认为这可能有点耗时,并不是处理这个问题的最好方法。

有人知道更好的解决方案吗?我使用PHP,jQuery和JavaScript。

+0

您的问题中没有足够的信息来给出答案。哪个API?你不能把'http://'改成'https://',为什么不呢?图像是否在外部资源上? – 2014-10-31 19:37:08

+0

亚马逊MWS ListMatchingProducts – baao 2014-10-31 19:38:27

+0

如果我将http://更改为https://它根本不显示任何图片。这些图像存储在亚马逊的服务器上 – baao 2014-10-31 19:41:20

回答

1

您必须在服务器上编写代理并通过它显示所有图像。基本上,你的网址应该是这样:

$url = 'http://ecx.images-amazon.com/images/I/51MU5VilKpL._SL75_.jpg'; 
$url = urlencode($url); 

echo '<img src="/proxy.php?from=' . $url . '">'; 

和proxy.php:

$cache = '/path/to/cache'; 
$url = $_GET['from']; 

$hash = md5($url); 
$file = $cache . DIRECTORY_SEPARATOR . $hash; 
if (!file_exists($file)) { 
    $data = file_get_contents($url); 
    file_put_contents($file, $data); 
} 

header('Content-Type: image/jpeg'); 

readfile($file); 
+0

这样做时,它可以用来做脚本注射Becareful。没有验证图像的来源,因此可能用它来代理互联网上的任何东西。 – iWantSimpleLife 2015-07-14 01:13:37

1

好吧,我要告诉你一个例子流。当然,您需要适应您的需求。

假设您使用此内容命名mws.php您的服务器上的PHP文件:

if (isset($_GET['image'])) 
{ 
    header('Content-type: image/jpeg'); 
    header('Content-transfer-encoding: binary'); 
    echo file_get_contents($_GET['image']); 
} 

查找网络上的任何图像,例如:

http://freebigpictures.com/wp-content/uploads/2009/09/mountain-stream.jpg 

现在你可以显示图片,就好像它位于你自己的安全服务器上一样:

https://<your server>/mws.php?image=http://freebigpictures.com/wp-content/uploads/2009/09/mountain-stream.jpg 

I如果你不止一次需要它,当然会更好地在本地存储图像,并且你必须包含正确的代码才能从亚马逊MWS ListMatchingProducts中获取它,但这是基本思想。

请不要忘记确保脚本不被滥用。