如何将重定向发布请求发送到外部网址?我在控制器中的代码:
if ($model->load(Yii::$app->request->post()) && $model->validate()) {
// send post request to external link
}
答案 0 :(得分:1)
您需要使用307
状态代码来指定应使用相同POST数据执行的重定向。
$this->redirect('https://example.com', 307);
HTTP 307 Temporary Redirect
重定向状态响应代码表示所请求的资源已被临时移动到Location
标头给出的URL。重用原始请求的方法和主体以执行重定向的请求。
https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/307
答案 1 :(得分:0)
您可以使用Guzzle轻松地做到这一点。根据{{3}},我认为您想要的是下面的代码。
if ($model->load(Yii::$app->request->post()) && $model->validate()) {
$response = $client->request('POST', 'http://httpbin.org/post', [
'form_params' => [
'field_name' => 'abc',
'other_field' => '123',
'nested_field' => [
'nested' => 'hello'
]
]
]);
}
答案 2 :(得分:0)
您可以使用HTTP 301重定向请求
Yii::$app->response->redirect('url', 301);
Yii::$app->end();
或使用Guzzle之类的任何php http客户端(请参阅How do I send a POST request with PHP?)。
没有其他选择。
答案 3 :(得分:0)
您可以使用CURL将数据发送到外部服务器。
您可以使用以下代码将发布请求发送到URL。
if ($model->load(Yii::$app->request->post()) && $model->validate()) {
$url = 'http://www.example-redirect.com';
$host = "http://www.example.com";
$postData = Yii::$app->request->post();
$ch = curl_init($host);
$data = http_build_query($postData);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
curl_close($ch);
// Redirect from here
return $this->redirect(Url::to($url));
}