受访问令牌请求标头保护的图像

时间:2014-03-18 19:58:41

标签: php web-services symfony cookies guzzle

我有一个网络服务,应该为我的网站提供图像。 问题是图像受“令牌”请求标头的保护。

我使用guzzle作为客户端库来调用web服务并获取图像。

$client = new \Guzzle\Service\Client();
$req = $client->get('https://www.customwebservice.be/v1/api/photo/ece1d868.jpg');
$req->addHeader('access_tokenid', 'token123');
$response = $req->send();
$test = ($response->getInfo());
echo '<img src="' . $test['url'] . '">';

但没有结果:S

如果我有一个cookie设置与webservice相同的域并且冲浪到url它可以工作但是我不能在每个用户上设置一个令牌cookie吗?

Thnx提前

1 个答案:

答案 0 :(得分:0)

我不知道保持此请求令牌对用户隐藏的重要性,但如果是这种情况,您可以让您的应用程序充当获取/提供图像的代理。

要实现此目的,您可以添加一个自定义路由/操作,直接将图像传递给您的客户端,而无需临时存储它。例如:

public function imageAction($filename)
{
    $response = \GuzzleHttp\get(
        'https://www.customwebservice.be/v1/api/photo/' . $filename,
        array('headers' => array('access_tokenid' => 'token123'))
    );

    return new Response(
        $response->getBody(),
        200,
        array('content-type' => $response->getContentType())
    );
}

您的模板如下所示:

<img src="{{ path('image', {'filename': 'ece1d868.jpg'}) }}" />

请注意,这是一个性能相当低的解决方案,因此如果您的应用程序提供大量图片密集的页面或必须处理大量流量,您应该考虑实施某种缓存解决方案。