4

因此,我将在以下位置收到 API 调用:

POST http://olddomain.com/api/call
    Post contents in Raw Body

我需要将其重定向到

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

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

所以现在我在想我可能需要将 POST 原始正文内容转换为查询字符串变量——调用中的数据量可能足够低,我们可以摆脱它——然后可能更新 API 调用处理程序在这种情况下接受 GET 参数。

这一切似乎都不干净。请告诉我有更好的方法。

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

4

2 回答 2

3

要从 PHP 重定向常规页面,您可以运行如下代码:

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

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

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

于 2012-08-09T17:21:57.990 回答
2

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

这两种方法都在本文中得到了很好的总结: 重定向 HTTP POST

希望有帮助!

于 2012-08-09T17:21:56.517 回答