2009-12-06 47 views
1

我有一個窗體在我的網站上發送數據到一些遠程站點 - 簡單的html表單。 我想要做的是使用數據用戶進入表單進行統計。 所以我不是發送數據到遠程頁面,而是先將它發送給我的腳本,再發送給遠程站點。使cURL的行爲完全像表格

事情是我需要它以正常的方式行事通常的形式會表現爲將用戶帶到遠程站點並顯示資源。

當我使用此代碼它有點兒工作,但不是在路上我想它:

$ch = curl_init(); 
curl_setopt($ch, CURLOPT_URL, $action); 
curl_setopt($ch, CURLOPT_POST, 1); 
curl_setopt($ch, CURLOPT_POSTFIELDS, $fields); 
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); 
$result = curl_exec($ch); 
curl_close($ch); 

問題是,它顯示在同一個腳本響應。例如,如果$ action是例如: somesite.com/processform.php並且我的腳本名稱是mysqcript.php,它將在「mysqcript.php」中顯示「somesite.com/processform.php」的響應,因此所有相對鏈接不起作用。 如何讓用戶發送到「somesite.com/processform.php」?按下按鈕的同樣的事情會做什麼?

Leonti

回答

0

有幾種方法可以做到這一點。這是最簡單的方法之一:只需使用307重定向。

header('Location: http://realsite.com/form_url.php', true, 307'); 

您可以之前或header()後,但如果你調用header()後做它,你將需要與

ignore_user_abort(true); 

注啓動腳本的瀏覽器都應該通知做你的日誌記錄和東西用戶的表單正在被重定向。

1

我認爲你將不得不這樣做對你的終點,翻譯相對路徑是客戶端的工作。它應該是簡單:只要把你做

http://otherdomain.com/my/request/path.php 

請求的基本目錄,並在不以「/」或協議開始每個傳出鏈接的前面加上它(「HTTP://」, 「FTP://」)。

檢測所有傳出鏈接是困難的,但我100%確定有這樣做的現成的PHP類。檢查例如this article和用戶註釋中的getLinks()函數。我不是100%確定這是否是你需要的,但它肯定會朝着正確的方向發展。

1

這裏有幾個可能的解決方案,這是我分開後,使他們不會被弄混了一個我建議:

1 - 不停地使用捲曲,解析響應,並添加一個<base/> tag它。它應該適用於該頁面上的所有內容。

<base href="http://realsite.com/form_url.php" /> 

2 - 不改變提交URL。將表單提交給真實URL,但使用一些Javascript庫(YUI)來捕獲它的內容並通過XHR將其發送到您的腳本。儘管如此,它仍然是一種黑客。