【问题标题】: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();
}