PHP прокси для получения XML: проблема с аргументами URL - PullRequest
0 голосов
/ 17 февраля 2011

Так что мне нужно получить XML из общедоступного API, но мое приложение находится во Flash, и общедоступная служба не будет реализовывать файл crossdomain.xml.Я нашел этот PHP-скрипт онлайн (ниже) для прокси-сервера для запроса URL.Он отлично работает для таких 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;
}
?>

Ответы [ 2 ]

1 голос
/ 17 февраля 2011

Если вы хотите, чтобы этот URL-адрес дошел до сценария невредимым в качестве параметра URL-адреса, сначала вам нужно будет кодировать URL-адрес , со стороны Flash.Например, правильный URL-адрес, используемый для доступа к вашему сценарию для вашего примера, на самом деле:

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

В противном случае ваш веб-сервер и PHP будут очень смущены тем, какой бит вашего URL-адреса является URL-адресом для прокси-сервера.и какой бит является URL-адресом, с которого вы хотите получить данные.

Решение со стороны Flash, вероятно, зависит от того, как вы выполняете вызов в данный момент.Но Actionscript имеет функцию escape () , которая сделает кодировку за вас.Вам нужно только закодировать URL-адрес, который вы отправляете прокси-серверу, , а не URL-адрес самого прокси-сервера, поэтому оставьте URL-адрес прокси-сервера как есть ("http://mysite.com/xml_proxy.php?url=") и затем бросьте escape () 'd URL сайта, с которого вы хотите получить данные, в конце этого.

Вам не нужно ничего делать с конца PHP, потому что PHP автоматически url-декодирует параметры в своей переменной $ _GET,именно так вы получаете этот URL в коде PHP.

0 голосов
/ 19 февраля 2013

Добавьте эту строку, если вам нужен прокси-клиент для мыла:

$header[] = "SOAPAction: ".$_SERVER['HTTP_SOAPACTION'];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...