如何使用PHP cURL避免被重定向

13

我正在开发一个表单,需要将收集到的数据以以下形式提交到第三方网站: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?

如果您认为除了使用cURL之外,还有更好的方法将数据提交给第三方网站,请随时告诉我。

提前感谢大家。

3个回答

10

试一下这个:

  <?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);
?>

你能否给出一个例子呢?即使我使用 CURLOPT_FOLLOWLOCATION 的 0 或 1,我仍然会被重定向。实际上,我只获取了我指定的 URL 的内容。我想要的只是提交收集到的数据。 - Ole Media
1
我找到了问题所在,原因是由于第三方网站导致了重定向。 - Ole Media

9
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);

不会输出结果

curl_setopt ($ch, CURLOPT_FOLLOWLOCATION, 0);

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


我需要从一个 .php 文件中运行一个 URL。我不需要获取它的输出或做任何事情。我只想调用一个 URL,例如:http://www.domain.com,以便服务器接收 URL 请求并执行请求。有什么帮助吗? - Ole Media

2
除了已接受答案提供的措施外,如果您正在回显输出,请确保对其进行转义。
例如,不要这样写:
$lastResponse = curl_exec( $ch );
echo $lastResponse;

使用:

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

这在我的情况下解决了问题,因为我得到的响应中有JS重定向。
我知道这是一个老问题,但它是在线上的第一个结果,所以希望这对像我一样在论坛上搜索几个小时后找到它的人有所帮助。原始答案: "最初的回答"

你是指 <meta http-equiv="Refresh" content="0; url=https://www.example.com" />,对吗? - Accountant م
哦,我明白了,你的意思是使用JS进行重定向,就像 document.location = "https://example.com" - Accountant م
@会计师,正确的,任何可以导致重定向的内容都应该被转义。 - ccrez

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接