2010-04-09 32 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