php cURL POST如何关注位置

时间:2010-04-09 11:57:10

标签: php curl

我对cURL问题有点不满。帖子工作很好,数据发布得很好并且收到正常,但是在执行cURL会话后,发布页面的网址永远不会出现在浏览器中,例如查看以下代码:

    $ch = curl_init("http://localhost/eterniti/cart-step-1.php");
    curl_setopt($ch, CURLOPT_HEADER, false);
    curl_setopt($ch, CURLOPT_POST, true);
    curl_setopt($ch, CURLOPT_POSTFIELDS, "error=1&em=$em&fname=$fname&lname=$lname&email1=$email1&email2=$email2&code=$code&area=$area&number=$num&mobile=$mobile&address1=$address1&address2=$address2&address3=$address3&suburb=$suburb&postcode=$postcode&country=$country");
    curl_exec($ch);
    curl_close($ch);

帖子工作正常,我被带到cart-step-1.php,在那里我可以处理发布的数据,但是浏览器的URL地址栏中的位置仍然是脚本页面的位置,在这种情况下proc_xxxxxx .PHP

任何想法如何获取URL地址以反映我实际发布到的页面?

感谢工厂

4 个答案:

答案 0 :(得分:1)

您正在寻找:

    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);

答案 1 :(得分:1)

您可以使用curl_getinfo获取重定向到的最后一个网址:

$url = curl_getinfo($ch , CURLINFO_EFFECTIVE_URL);

然后使用header

将用户重定向到该页面

答案 2 :(得分:0)

在这种情况下你需要在html中执行 - 所以你的proc_xxxxxx.php会返回一个html页面,该页面是一个实际发送帖子数据的表单。

您目前正在做的是检索服务器上的某个页面(带参数),并将其作为浏览器请求的页面的数据返回。你的浏览器仍然认为它叫proc_xxxxxx.php,但它从服务器返回的html数据来自cart-step-1.php请求,但你的浏览器无法知道这一点。

将浏览器栏中的网址设置为任意内容是不可能的,因为这会带来巨大的安全风险(例如window.url.display = 'http://www.ebay.com/login'):D

答案 3 :(得分:0)

完成curl内容后,您可以使用header()重定向用户:

header('Location: http://localhost/eterniti/cart-step-1.php');

更完整:

$url = "http://localhost/eterniti/cart-step-1.php";

$ch = curl_init($url);
curl_setopt($ch, CURLOPT_HEADER, false);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, "error=1&em=$em&fname=$fname&lname=$lname&email1=$email1&email2=$email2&code=$code&area=$area&number=$num&mobile=$mobile&address1=$address1&address2=$address2&address3=$address3&suburb=$suburb&postcode=$postcode&country=$country");
curl_exec($ch);
curl_close($ch);

header('Location: ' . $url);
exit;

根据此网站对参数的期望,这可能会也可能不会。如果您将浏览器重定向到此页面,它将只是来自浏览器的GET请求。您无法让浏览器发送POST数据。


只有我想到的事情(如果你想让浏览器发送POST数据)是:
而不是使用curl,创建一个包含隐藏字段中所有值的表单,并显示一个显示Continue的按钮。然后用户只需按下按钮。