Yii2-在外部URL上执行http形式的POST并重定向到它

问题描述

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

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

如果我使用JS在前端进行所有操作,一切都很好。

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

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

请注意,我不是在寻找简单的重定向,它是外部URL上的表单。

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

有人遇到这个问题吗?

解决方法

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

您必须将带有单独请求的数据从服务器发送到ACME服务器。您无法创建HTML <form>并将ACME服务器置于其action参数中,因为该请求将从客户端而不是您的后端发送,从而失败,进入白名单。验证客户输入后,您可以将其发送到ACME。

使用状态码,您可以决定请求是否成功。您可以详细了解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();
}

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...