【问题标题】:PHP proxy to get XML: problem with URL arguments获取 XML 的 PHP 代理:URL 参数的问题
【发布时间】:2011-06-29 08:00:57
【问题描述】:

所以我需要从公共 API 中检索 XML,但我的应用程序是在 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;
}
?>

【问题讨论】:

    标签: php xml flash proxy arguments


    【解决方案1】:

    如果您希望该 URL 作为 URL 参数毫发无损地通过脚本,您必须首先在 Flash 端 url-encode 它。例如,用于获取示例脚本的正确 URL 实际上是:

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

    否则,您的 Web 服务器和 PHP 会很困惑,您的 URL 的哪一部分是代理服务的 URL,哪一部分是您要从中获取数据的 URL。

    Flash 方面的解决方案可能取决于您目前的通话方式。但 Actionscript 有一个 escape() 函数,它会为您进行编码。您只想对发送给代理的 URL 进行编码,而不是代理本身的 URL,因此请保留代理 URL(“http://mysite.com/xml_proxy. php?url=") 然后抛出你想从中获取数据的站点的escape()'d URL。

    您不需要从 PHP 端做任何事情,因为 PHP 会自动对其 $_GET 变量中的参数进行 url 解码,这就是您在 PHP 代码中获取该 URL 的方式。

    【讨论】:

      【解决方案2】:

      如果您需要代理soap客户端,请添加此行:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-05-09
        • 1970-01-01
        • 2012-11-05
        • 2011-08-18
        • 1970-01-01
        • 2015-11-17
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多