【问题标题】:Yii2 - Do a http form POST on external URL and redirect to itYii2 - 在外部 URL 上做一个 http 表单 POST 并重定向到它
【发布时间】:2020-12-15 20:57:56
【问题描述】:

我在 Yii2 上有一个应用程序。

我有一个想要重定向的外部供应商。例如,我正在加密当前用户信息,并希望将其发送给外部供应商,因此用户信息会自动填充到他的网站上。

如果我在前端使用 JS 执行此操作,一切正常。

我遇到的问题是只有我的应用服务器被列入供应商白名单。所以我需要在后端进行重定向。

我尝试了几种方法,即使使用 Guzzle HTTP,它也不会重定向。

需要明确的是,我不是在寻找简单的重定向,它是外部 URL 上的表单帖子。

我浏览了这篇文章,但问题仍然存在...... Yii2 how to send form request to external url

有人遇到过这个问题吗?

【问题讨论】:

    标签: php forms post yii2 external


    【解决方案1】:

    如果我对您的理解正确,您希望将从您的前端收到的数据发布到第三方公司的服务器(我们称他们为 ACME)。 ACME 将您的网络服务器列入白名单,但您的客户端没有(这很好)。您想在 POST 之后在您的服务器上显示一个页面,而不是在 ACME 服务器上显示一个页面,对吧?

    您必须通过单独的请求将数据从您的服务器发送到 ACME 服务器。您不能创建 HTML <form> 并将 ACME 服务器放在它的 action 参数中,因为请求将从客户端而不是您的后端发送,在白名单中失败。验证客户端输入后,您可以将其与 guzzle 一起发送到 ACME。

    通过状态码,您可以决定您的请求是否成功。你可以阅读更多关于 guzzle here

    下面的代码示例展示了如何将$payload(如果您愿意的话,是一篇虚构的博客文章)作为 JSON 发布到 ACME 服务器并输出一行请求结果。

    $payload = [
        'username' => 'john.doe',
        'postContent' => 'Hello world',
    ];
    
    $client = new GuzzleHttp\Client();
    $response = $client->post('https://acme.example.org/endpoint',['http_errors' => false, 'json' => $payload]);
    
    if($response->getStatusCode() === 200){
        echo "Request OK";
    }else{
        echo "Request failed with status ".$response->getStatusCode();
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-01-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-03-03
      • 2019-08-31
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多