根据PHP中的请求返回HTML或XML

时间:2011-06-03 07:32:22

标签: php xml httprequest

现有的网站用PHP编写。最初只有网站存在,但现在正在构建一个Android应用程序,可以从重用一些PHP逻辑中受益。

PHP网站的结构使得有许多页面可以执行操作,在$_SESSION中设置成功/错误信息,然后重定向到可视页面而不自行输出任何内容。例如,有action_login.php

该页面接受用户名和密码(来自GET或POST变量),验证凭据,在$ _SESSION中设置成功/失败消息,然后在成功时重定向到登录主页或在失败时返回登录屏幕。我们将此行为称为“HTML响应”。

Android应用程序需要调用同一页面,但不知何故告诉它需要“XML响应”。当页面检测到此情况时,它将以XML格式输出成功/错误消息,而不是将其放入$_SESSION并且不会重定向。无论如何,这是个主意。这有助于防止重复代码。我不想让action_login.phpaction_login.xml.php浮动。

我已经读过,Accept Header的使用不够可靠(参见: Unacceptable Browser HTTP Accept Headers (Yes, You Safari and Internet Explorer) )。我的后备解决方案是POST xml=1或使用{url}?xml=1进行GET请求。还有更好的方法吗?

没有使用任何框架,这是普通的PHP。

3 个答案:

答案 0 :(得分:2)

这就是Accept Header的用途。让Android请求页面作为application / xml,然后检查脚本中请求的内容。使用Apache时,您可能还对mod_negotiation感兴趣。或者使用WURFL来检测UserAgent并在Android时用作XML。

答案 1 :(得分:2)

我会使用Android应用程序为每个请求发送一个cookie(我真的更喜欢Accept标题,但是你用webkit指出的问题我明白你不愿意这样做)。 cookie简化了代码服务器端,不必检查$ _GET ['xml']或$ _POST ['xml'],如果某个android用户共享你的应用程序的URL并且它有一个?xml = 1,在计算机浏览器中打开它的用户将接收XML而不是正常的Web输出。

我不会依赖$ _SESSION用于移动应用程序,因为移动平台上的用户(或至少我这样做)倾向于打开你的应用程序,玩5分钟,把手机放在口袋里,2小时后回到你的应用程序。你想设置会话有效期这么久吗?

答案 2 :(得分:1)

为什么不为应用程序设置特定会话,然后只在会话设置为

的情况下设置标题
$_SESSION['app'] = "andriod app";

if ($_SESSION['app'] == "andriod app") {
  header..

不确定如何将其实现到应用程序中,因为我对应用程序的工作很少,但希望这有助于您的思考过程