如何防止使用PHP cURL重定向

时间:2011-08-06 00:10:49

标签: php curl

我正在开发一个表单,其中要求将收集的数据提交给第三方网站,格式为:http://www.domain.com/page?key=value&key2=value2

我决定使用cURL,因为我没有找到让我信服的替代品。

我正在运行的问题是,一旦提交表单,就会执行cURL,但我被重定向到我指定的域。相反,我想将用户重定向到我的域中的确认页面而不是第三方网站。

以下是我正在使用的代码示例:

$URL="otherserver.domain.com";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,"http://$URL"); 
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, "key=value2&key2=value2&key3=value3");
curl_exec($ch);
$info = curl_getinfo($ch);
curl_close ($ch);

如何防止被重定向到otherserver.domain.com?

如果您认为有更好的方式将数据提交到第三方网站,请随时告诉我。

提前谢谢大家

3 个答案:

答案 0 :(得分:5)

curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);

不会输出结果

curl_setopt ($ch, CURLOPT_FOLLOWLOCATION, 0);

会忽略重定向(因此当http://google.com/将您转移到https://google.us/时,这会忽略它)

答案 1 :(得分:5)

试试这个:

  <?php
$url = "http://***.."; 
$ch = curl_init($url);
$opts = array(CURLOPT_RETURNTRANSFER => 1,
          CURLOP_HEADER => 1,
          CURLOPT_FOLLOWLOCATION => 0,
          CURLOPT_POST => 1,
          CURLOPT_POSTFIELDS => "foo=ba"); 
curl_setopt_array($ch, $opts); 
echo curl_exec($ch);
?>

答案 2 :(得分:0)

除了已接受的答案上提供的措施外,如果回显输出,还请确保转义输出。

例如,代替:

$lastResponse = curl_exec( $ch );
echo $lastResponse;

使用:

$lastResponse = curl_exec( $ch );
echo htmlentities($lastResponse ,ENT_QUOTES);

这解决了我的问题,因为我得到的响应上有一个JS重定向。

我知道这是一个古老的问题,但它是在线获得的第一个结果,因此希望这可以帮助某人,就像在经过几个小时的搜索后在论坛上找到它对我一样。