重定向HTTP表单帖子

时间:2012-10-26 17:01:36

标签: php html apache iis curl

一点背景: 我在公共网站上有一个表单需要将数据发布到防火墙后面的apache服务器。我不想通过互联网直接访问此虚拟主机。

目前这就是我正在做的事情:我的DMZ中有一台IIS服务器,这个IIS服务器是唯一允许通过防火墙访问apache服务器的IP服务器。作为临时解决方案,我使用“应用程序请求路由”设置IIS,通过IIS将Apache框呈现给互联网。

* 我想做什么: *有一些方法可以捕获然后传递表单而无需将Apache框呈现给互联网。这里的诀窍是POST将来自互联网上的任何地方,被IIS服务器抓取,然后从IIS服务器中继到apache框。我已经研究过用PHP / cURL做这个,但我不确定是否 使用这样的东西可以解决问题:

<?php

$todo = "";

while (list($name, $value) = each($HTTP_POST_VARS)) {
$todo.=$name."=".$value."&";
}

$ch = curl_init('http://mylanserver/capture.php');
curl_setopt ($ch, CURLOPT_POST, 1);
curl_setopt ($ch, CURLOPT_POSTFIELDS, $todo);
curl_exec ($ch);
curl_close ($ch);
?>

有人能指出我正确的方向吗?感谢。

3 个答案:

答案 0 :(得分:4)

我包含的第一个语句工作正常,但没有传递在表单上有多个选择选项的值。它只是在字段中填充“数组”。我通过这样做纠正了这个问题:

$postParams = file_get_contents("php://input"); 


$ch = curl_init('http://mysite/capture.php');
curl_setopt ($ch, CURLOPT_POST, 1);
curl_setopt ($ch, CURLOPT_POSTFIELDS, $postParams);
curl_exec ($ch);
curl_close ($ch);

然后我需要将客户端重定向到“谢谢”页面,我的后端程序正在发送此数据,但我无法使用cURL来运行它,我通过执行标头刷新和设置来解决这个问题值为1.像这样:

header("refresh:1;url=http://mythankyoupage");  

感谢您的帮助!

答案 1 :(得分:0)

如果我正确理解你,你想发送帖子数据吗?

试试这个:

$url = 'http://server.com/path';
$data = array('key1' => 'value1', 'key2' => 'value2')

// use key 'http' even if you send the request to https://...
$options = array('http' => array(
    'method'  => 'POST',
    'content' => http_build_query($data)
));
$context  = stream_context_create($options);
$result = file_get_contents($url, false, $context);

你不必自己构建$ data数组,你可以传递$ _POST数组。

答案 2 :(得分:0)

使用史努比。它会帮助你很多。或者将数据保存在某个临时数据库中,创建一个小机器人(你可以再次使用snoopy)并允许它与web服务器通信并按照你喜欢的方式播放数据。在cron选项卡中将此机器人安排为cron。