2014-03-18 104 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

相關問題