我试图在不使用cURL的情况下将数据从一个页面转发到另一个页面,这可能吗?
目前我已经尝试了
header('HTTP/1.1 307 Temporary Redirect');
header('Location: new-location.php');
这很好用,但是给出了一个愚蠢的弹出框,还有其他方法吗?
我尝试过使用curl但没有任何反应,不确定它是否在我的服务器上启用了!
答案 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;