所以,我将在:
接收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客户端使用它。
答案 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
希望有所帮助!