2010-04-09 30 views
1

我处于一个有cURL问题的车辙。该职位的工作马丽娟,数据张贴只是罚款和接收正常,但发布页面的URL执行卷曲会议结束后不会出现在浏览器中,例如看看下面的代码:php cURL POST如何关注位置

$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地址,以反映我实际上POSTED到的页面?

谢谢你需要做的是在HTML这种情况下磨

+1

该页面你什么意思?你的代码完全在服务器端工作。你想重定向到生成的网址吗? – 2010-04-09 11:59:21

回答

0

- 让你的proc_xxxxxx.php返回contanis实际发送POST数据的表单的HTML页面。

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

在浏览器栏设置URL的东西随意是不可能的,因为这将是一个巨大的安全风险(如window.url.display = 'http://www.ebay.com/login'):d

+0

我完全明白这一点。目前,我已经从cart-step-1.php显示内容,就好像我已经在那里提交了一个表单。那么我是否仍然无法通过发布数据将查看者发送到该页面,就好像他向该页面发布了一个表单一样?有一个叫做CURLOPT_FOLLOWLOCATION的cURL setopt参数,我认为它应该跟随我们正在卷曲的url的位置,但事实似乎并非如此。 如果我包含一个头(“Location:cart-step-1.php”),它将失败,因为头已经发送。 – SimonDowdles 2010-04-09 12:10:02

+0

是的,这就是我所说的'你需要在html中完成它' - 你实际上想要将这些数据从你的浏览器发布到cart-step-1.php - 所以要么丢失了proc_xxxxxx.php或者proc_xxxxxx.php返回一个html页面,它是所有参数填写完毕的表单,动作设置为cart-step-1.php(如果需要,你可以自动提交一个带有javascript的表单),然后它会给出你想要的行为。 – oedo 2010-04-09 12:14:41

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; 

根据这个网站上预计parame特斯特,这可能会或可能不会工作。如果您将浏览器重定向到此页面,它将只是来自浏览器的GET请求。您无法让浏览器发送POST数据。


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

+0

为了澄清,我想将数据发布到cart-step-1.php以及发送用户在那里。我在这里有道理吗?所以想象我用表单提交替换cURL,我需要相同的行为,但我不能发布表单,因为它是我的脚本处理数据。实质上,我希望我的脚本将数据发布到cart-step-1.php,并且只有在数据未被正确验证的情况下才会发生,也就是说,如果用户提交了不正确的数据 – SimonDowdles 2010-04-09 12:12:01

+0

@webfac:因此,您需要预先处理数据它被发送到“真实”的网站吗?正如我所说,你可以创建一个新的窗体,其中隐藏字段中的所有处理值。当然这不会以任何方式安全,从技术上讲,用户仍然可以篡改这些数据。 – 2010-04-09 12:14:00

+0

正确,如果数据未完成,此处理脚本将返回数据以及错误代码。所以是的脚本预处理数据,并将其发回。我想最坏的情况下,我可以将参数附加到URL并使用GET方法发送,但它看起来很脏! – SimonDowdles 2010-04-09 12:16:52

1

您正在寻找:

curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); 
1

您可以使用curl_getinfo得到最后的网址您重定向到:

$url = curl_getinfo($ch , CURLINFO_EFFECTIVE_URL); 

,然后将用户重定向到使用header