2014-03-18 60 views
0

我有一个web服务应该为我的网站提供图像。 问题是图像受到“标记”请求标题的保护。使用访问令牌请求标头保护的图像

我使用guzzle作为客户端库调用webservice并获取图像。

$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与同一域中的互联网服务和冲浪它的工作原理的URL集,但我不能给每个用户标记饼干权设定?

提前

日Thnx

+0

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

回答

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

请注意,这是一个相当低性能的解决方案,因此,如果您的应用程序提供大量图像重的网页或具有处理很多流量,你应该考虑实施某种缓存解决方案。

+0

伟大的工程就像一个魅力! 我在它前面有清漆,所以它会被缓存。 thnx您的帮助! – evancauwenberg

相关问题