2011-02-17 2 views
0

공용 API에서 XML을 가져와야하지만 내 앱이 Flash에 있고 공용 서비스가 crossdomain.xml 파일을 구현하지 않습니다. 이 URL을 요청하는 프록시에 대해이 PHP 스크립트 온라인 (아래)을 발견했습니다. 이 같은 URL에 대해 잘 작동 :XML 가져 오기위한 PHP 프록시 : URL 인수 문제

http://mysite.com/xml_proxy.php?url=http://rss.cnn.com/rss/cnn_topstories.rss

하지만 스크립트에 중 스트립 것 또는 같은 URL에 인수 무시 :

http://mysite.com/xml_proxy.php?url=http://publicapiserver.com?app_ID=35235x&app_key=84x

내가 무지 PHP 해요입니다. 이 스크립트가이 URL 인수를 처리하도록하는 쉬운 방법이 있습니까? 매우 감사합니다.

<?php 

$post_data = $HTTP_RAW_POST_DATA; 

$header[] = "Content-type: text/xml"; 
$header[] = "Content-length: ".strlen($post_data); 

$ch = curl_init($_GET['url']); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
curl_setopt($ch, CURLOPT_TIMEOUT, 10); 
curl_setopt($ch, CURLOPT_HTTPHEADER, $header); 

if (strlen($post_data)>0){ 
    curl_setopt($ch, CURLOPT_POST, 1); 
    curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data); 
} 

$response = curl_exec($ch);  
$response_headers = curl_getinfo($ch);  

if (curl_errno($ch)) { 
    print curl_error($ch); 
} else { 
    curl_close($ch); 
    header('Content-type: ' . $response_headers['content-type']); 
    print $response; 
} 
?> 

답변

1

당신이 URL은 URL 매개 변수로 상처 스크립트에 통과하는 것을 원한다면, 당신이 처음 url-encode해야, 플래시 측 : 여기에 스크립트입니다. 귀하의 예를 실제로 대한 예를 들어, 올바른 URL이 스크립트에 도착하는 데 사용할 :

http://mysite.com/xml_proxy.php?url=http%3A%2F%2Fpublicapiserver.com%3Fapp_ID%3D35235x%26app_key%3D84x 

그렇지 않으면 웹 서버와 PHP가 URL의 비트가 프록시 서비스의 URL 인에 대해 매우 혼란스러워 할 것이다, 어떤 비트는 데이터를 가져 오려는 URL인지 나타냅니다.

플래시 측의 해결책은 현재 전화를받는 방법에 달려 있습니다. 하지만 Actionscript는 인코딩을 수행 할 escape() 함수를 가지고 있습니다. 이 아닌 프록시에 URL을 인코딩하려는 경우 프록시 URL을 그대로 두십시오 ("http://mysite.com/xml_proxy.php?url=").) 그리고 나서 이스케이프() URL을 당신이 그것의 끝에있는 데이터를 얻을 사이트의 던져.

PHP는 PHP 코드에서 해당 URL을 잡는 방법 인 $ _GET 변수의 매개 변수를 자동으로 URL 디코딩하므로 PHP 끝 부분에서 아무 것도 할 필요가 없습니다.

$header[] = "SOAPAction: ".$_SERVER['HTTP_SOAPACTION']; 
+0

아 남자가 총 말이 ... : 당신은 프록시 비누 클라이언트를 필요로하는 경우 – Gregir

0

이 줄을 추가합니다. 고맙습니다.
관련 문제