Yii2如何将表单请求发送到外部网址

时间:2018-07-27 17:43:12

标签: php post yii2

如何将重定向发布请求发送到外部网址?我在控制器中的代码:

    if ($model->load(Yii::$app->request->post()) && $model->validate()) {
      // send post request to external link
    }

4 个答案:

答案 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));
    }