2012-05-08 8 views
2

PHP 이미지 프록시 스크립트를 만들고 있습니다. 요청한 이미지의 내용을 에코 할뿐만 아니라 이미지 요청 헤더를 동일하게 재생해야합니다.헤더가있는 PHP cURL 프록시?

나는 하나를 보았고, 다른 하나는 함께 보았지만 ...이 cURL 옵션은 나를 혼란스럽게합니다. 어떻게하면 좋을까요?

답변

1

죄송합니다. 원하시는 것이 확실하지 않습니다.

이미지 url, echo header에서 가져 와서 이미지를 파일로 저장하는 예입니다. 프록시를 원한다면, 당신은 웹 서버 (Nginx에, 아파치 등)를 사용한다

하지만, PHP는 그는 그가 백엔드에 proxy'ing 년대 요청의 헤더에 대해 묻는 데요 필요

<?php 
$ch = curl_init(); 
curl_setopt($ch, CURLOPT_URL, "http://img3.cache.netease.com/www/logo/logo_png.png"); 
curl_setopt($ch, CURLOPT_HEADER, 1); 
curl_setopt($ch, CURLOPT_REFERER, "http://www.163.com/"); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
curl_setopt($ch, CURLOPT_BINARYTRANSFER, 1); 
$return = curl_exec($ch); 
curl_close($ch); 

list($header, $image) = explode("\r\n\r\n", $return, 2); 

echo $header; 

file_put_contents("/tmp/logo.png", $image); 
+0

많은 코드를 변경해야했지만 정확히 알아낼 필요가있었습니다. 정말 고마워! 당신은 나를 구해주었습니다 : D –

+1

하나님의 사랑을 위해 제발 당신이해야 할 일을 설명해주세요. PHP CURL 프록시 이미지를위한 구글에서 왔는데 왜 그 부분이 당신을 위해 일했는지 말하지 않습니다. –

-1

당신은 getallheaders()

다시 함께 다음 문자열을 함께 (안 원시 텍스트로) 모든 헤더를 얻을 수 있습니다 :

$headers = ""; 
foreach (getallheaders() as $name => $value) { 
    $headers = "$name: $value\r\n"; 
} 
$headers .= "\r\n"; // Double newline to signal end of headers (HTTP spec) 

그럼 내가 가장 좋은 방법을 생각한다 다음과 같이 CURL 대신 소켓 연결을 사용하는 것입니다 :

$response = ''; 
$fp = fsockopen('example.org', 80); 
fputs($fp, $headers); 
while (!feof($fp)) { 
    $response .= fgets($fp, 128); 
} 
fclose($fp); 

호스트/요청 헤더를 수정해야 할 수도 있습니다 (요청한 것과 동일한 사본이기 때문에). 리디렉션을 구현해야 할 수도 있습니다.

+1

없다 . 예 : 프록시 요청 getallheaders는 백엔드에 대한 호출이 아닌 요청 헤더를 호출자로부터 제공합니다. 특히 getallheaders()는 버전 5.4.0 이전의 주목할만한 php-cgi (아파치 및 일부 버전)와 같은 모든 플랫폼에서 지원되지 않으므로 nginx에 있다면 몇 가지 트릭을 수행해야합니다. –