PHP转发数据发布

时间:2011-05-30 19:30:28

标签: php

我试图在不使用cURL的情况下将数据从一个页面转发到另一个页面,这可能吗?

目前我已经尝试了

header('HTTP/1.1 307 Temporary Redirect');
header('Location: new-location.php');

这很好用,但是给出了一个愚蠢的弹出框,还有其他方法吗?

我尝试过使用curl但没有任何反应,不确定它是否在我的服务器上启用了!

5 个答案:

答案 0 :(得分:11)

我认为以下是实现这一目标的唯一可行方法,而不是使用位置标头重定向,请发送此html: -

<!DOCTYPE html>
<html>
    <body onload="document.forms[0].submit()">
        <form action="new-location.php" method="post">
            <?php foreach( $_POST as $key => $val ): ?>
                <input type="hidden" name="<?= htmlspecialchars($key, ENT_COMPAT, 'UTF-8') ?>" value="<?= htmlspecialchars($val, ENT_COMPAT, 'UTF-8') ?>">
            <?php endforeach; ?>
        </form>
    </body>
</html>

答案 1 :(得分:11)

您可以使用以下内容将帖子数据转发到其他网址。请注意,响应是在$ data变量中捕获的,您可以使用它来执行任何操作。

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "http://www.domain.tld/urltopostto.php");
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_TIMEOUT, 100);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($_POST));
$data = curl_exec($ch);
curl_close($ch);

答案 2 :(得分:2)

如果我正确理解了问题并且您正在使用启用了mod_rewrite的Apache服务器,则可以使用URL重写。您可以将请求方法设置为条件,并将原始URL重写为备用URL:

RewriteCond %{REQUEST_METHOD} ^POST
RewriteRule ^index.php new-location.php [L]

答案 3 :(得分:1)

使用cURL或fopen()是常见的建议,但实际上并未将用户“转发”到其他页面。

要真正将用户转发到$ _POST数据完整的另一个页面,您可以动态创建一个中间页面,其中包含一个带有发布数据的表单和立即提交表单的JS代码(以及提交表单的按钮或链接)如果用户没有启用JS,则表单。

然后,您将用户转发到该中间页面,然后将用户转发到目标页面,其中#_POST数据保持不变。如果中间页面没有可见内容,则用户将不知道它在那里。

目标页面可以取消链接中间页面,因此无法重新提交。

答案 4 :(得分:-2)

也许,也许你可以这样试试:

header("Status: 200");
header("Location: new-location.php");
exit;