【问题标题】:Images protected with access token request header受访问令牌请求标头保护的图像
【发布时间】:2014-04-24 17:54:01
【问题描述】:

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

我使用 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

如果我设置了一个与 web 服务具有相同域的 cookie,并且它可以冲浪到 url,但我不能为每个用户设置一个令牌 cookie,对吗?

提前谢谢

【问题讨论】:

  • 我想出了如何下载图像。但这并不是我真正想要实现的目标:S '''' 222 $client = new \Guzzle\Service\Client(); '''' 223 $req = $client->get('customwebservice.be/v1/api/b4a9c1d52385.jpg'); '''' 224 $req->addHeader('access_tokenid', 'token123'); '''' 225 // $req->setResponseBody('/tmp/test.jpg');

标签: php web-services symfony cookies guzzle


【解决方案1】:

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

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

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'}) }}" />

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

【讨论】:

  • 太棒了,它就像一个魅力!我在它前面有清漆,所以它会被缓存。谢谢你的帮助!
猜你喜欢
  • 2018-08-24
  • 2019-06-04
  • 1970-01-01
  • 2015-06-05
  • 2012-02-10
  • 2016-06-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多