需要将POST重定向到另一个域的API调用

时间:2012-08-09 17:09:58

标签: json api http magento post

所以,我将在:

接收API调用
POST http://olddomain.com/api/call
    Post contents in Raw Body

我需要将其重定向到

POST http:://newdomain.com/api/call

具有相同的Raw Body内容。似乎没有办法重定向POST服务器端,唯一的方法是生成一个HTML表单并通过JS提交该表单。所以,鉴于此,我甚至不确定我们的API客户端是否有可能期望JSON返回给他们呈现并提交HTML / JS以重定向POST。

所以现在我想我可能只需要将POST原始内容翻译成查询字符串变量 - 调用中的数据量可能足够低,以至于我们可以侥幸逃脱 - 然后可能会更新API调用处理程序,用于在此方案中接受GET参数。

这一切看起来都不干净。请告诉我有更好的方法。

更新:实现需要curl兼容性,因为API客户端使用它。

2 个答案:

答案 0 :(得分:3)

要从PHP重定向常规页面,您可以运行以下内容:

header("Location: http://newdomain.com/api/call");
exit;

但是我不确定大多数客户端是否会自动传递相同的POST数据(根据上面的Jay,这将携带POST数据)。无论如何,这假设客户端本地处理HTTP重定向,如果客户端在其他人的计算机上运行,​​则出于安全原因,您不能依赖该重定向。例如,PHP的open_basedir设置不允许curl遵循HTTP重定向。

出于这个原因,您不能指望客户端为重定向。你将不得不成为一个中间人,并在内部对newdomain.com进行新的调用,然后将响应传递回客户端。这可能不是一个理想的解决方案,但是当您托管API时,您必须小心您认为客户可以或将要做的事情。

答案 1 :(得分:2)

我知道有两种方法可以做到这一点。您可以(a)重定向.htaccess中的HTTP标头(PHP代码中的标头重定向不会带有POST),或者您可以使用一些简单的curl代码重新移植到PHP代码中的新页面。

这两篇方法在本文中总结得非常好: Redirecting an HTTP POST

希望有所帮助!