【问题标题】:Need to redirect a POST to an API call to another domain需要将 POST 重定向到另一个域的 API 调用
【发布时间】:2012-08-06 23:29:48
【问题描述】:

所以,我将在以下位置收到 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 原始正文内容转换为查询字符串变量——调用中的数据量可能足够低,我们可以摆脱它——然后可能更新在这种情况下接受 GET 参数的 API 调用处理程序。

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

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

【问题讨论】:

    标签: json api http magento post


    【解决方案1】:

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

    本文很好地总结了这两种方法: Redirecting an HTTP POST

    希望有帮助!

    【讨论】:

    • 很好,如果没有 curl 限制,htaccess 重定向将是一个完美的解决方案。我想知道某种 dns 级别的重定向是否可以解决问题。
    【解决方案2】:

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

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

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

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

    【讨论】:

    • 很好地抓住了卷曲限制。我想知道是否可以进行某种域级别的重定向(例如在域注册商级别),这不会遇到该限制。
    • 不,我认为这是不可能的。域转发实际上是进行 HTTP 重定向,另一个选项是屏蔽,我什至不会考虑:support.godaddy.com/help/article/422/…
    猜你喜欢
    • 1970-01-01
    • 2015-03-14
    • 1970-01-01
    • 2020-05-04
    • 1970-01-01
    • 1970-01-01
    • 2014-08-28
    • 1970-01-01
    • 2014-03-07
    相关资源
    最近更新 更多