簡體   English   中英

使用php,我如何通過POST模擬完整的表單提交數據?

[英]with php, how can I send data via POST simulating in full a form submit?

我的問題是:我有一個在線服務,主持我的客戶目錄。
此服務需要身份驗證,但我只有一個用戶名/密碼。
相反,我的客戶希望使用自己的用戶/密碼和訪問統計信息單獨管理每個用戶。 所以我所做的就是建立自己的帳戶管理,到目前為止一切都很好。
我現在需要做的是添加一個登錄表單,用戶應該使用自己的憑據填寫; 一旦發送,腳本應繼續進行身份驗證,如果一切正常,則增加訪問次數,通過POST發送遠程系統的登錄數據,並將瀏覽器重定向到響應頁面,這與普通表單的方式相同。
我嘗試過這樣使用curl

if (authenticate($_POST['usr'],$_POST['pwd'])) {
    $url = "http://www.foo.com/login.php";
    $postdata = http_build_query(array('username'=>"foo",'password'=>"bar"));
    $curl = curl_init();
    curl_setopt($curl, CURLOPT_URL, $url);
    curl_setopt($curl, CURLOPT_POST, 1);
    curl_setopt($curl, CURLOPT_POSTFIELDS, $postdata);
    curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1);
    curl_exec($curl);
    curl_close($curl);
}

但我最終將目標網頁的數據加載到我自己的頁面,而不是重定向到網站。
我該怎么辦?
PS如果可能的話,我會避免訴諸通過JS提交的隱藏表格。
謝謝!

使用CURLOPT_RETURNTRANSFER

curl_setopt($curl, CURLOPT_RETURNTRANSFER, false);

從手冊:

TRUE將傳輸作為curl_exec()的返回值的字符串返回,而不是直接輸出。

我不認為你看到你想要做的事情的全貌。 基本上,重定向對您沒有幫助,因為身份驗證不是基於URL的,而是基於cookie或會話。 換句話說,您無法對自己進行身份驗證(當您使用隱藏憑據模擬該網站上的表單提交時會發生這種情況)並讓您的訪問者為自己獲得身份驗證。 重定向不會幫助你。 即使你重定向他,他也沒有經過身份驗證。 您的服務器是,因為它提交了表單,而不是用戶自己。

我沒有得到的是你可以通過使用隱藏憑據對用戶進行身份驗證,然后讓他完全訪問統計信息,為什么不給他訪問權限呢? 您正在向他提供對所有內容的完全訪問權限,但是不要給他登錄名和密碼?

作為一方,不能進行POST重定向,因此您無法使用偽造的POST數據重定向表單提交。 重定向時丟失所有POST數據。

作為一個丑陋的解決方法,我將建議以下內容:您可以像現在一樣對自己進行身份驗證,然后讓用戶瀏覽您網站上的統計信息,類似於代理服務器。 然后,您可以將頁面上的所有鏈接更改為yoursite.com/viewstats/?page=URL ,其中URL是用戶想要查看的統計網站的頁面。 您抓住該頁面並將其顯示給用戶。 您需要更改css / js文件的相對路徑以保持其設計,您還需要更改所有內部網站鏈接,例如"/viewstats/?page=" . urlencode($old_url) "/viewstats/?page=" . urlencode($old_url)所以他們指向你的代理門。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM