讓我們來看看,如果我可以試試這個,因爲你似乎對HTML表單的工作原理有點困惑。
首先,你的網站看起來像這樣,對嗎?
<html><head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<form
method="post"
action="http://poster.decaptcher.com/"
enctype="multipart/form-data">
<input type="hidden" name="function" value="login">
<input type="text" name="username" value="client">
<input type="text" name="password" value="qwerty">
<input type="file" name="upload">
<input type="text" name="upload_to" value="0">
<input type="text" name="upload_type" value="0">
<input type="submit" value="Send">
</form>
</head><body></body></html>
有一點需要指出,在我們解釋一個HTML表單,就是你必須在網頁的<head>
表單。任何應該被用戶看到的元素(或者任何你想要出現在瀏覽器的主查看區域中的元素)都應該在<body>
中。如果不這樣做,瀏覽器就會陷入「怪癖模式」,它實際上並不知道你在說什麼,並且試圖建立它認爲你想要的網站是最好的猜測。你要知道,現代瀏覽器都非常不錯的猜測,但你還是應該重新寫它:
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
</head>
<body>
<form
method="post"
action="http://poster.decaptcher.com/"
enctype="multipart/form-data">
<input type="hidden" name="function" value="login">
<input type="text" name="username" value="client">
<input type="text" name="password" value="qwerty">
<input type="file" name="upload">
<input type="text" name="upload_to" value="0">
<input type="text" name="upload_type" value="0">
<input type="submit" value="Send">
</form>
</body>
</html>
至於解釋<form>
標籤...當你在HTML提交表單,它實際上加載另一個網站。它不會在後臺祕密發送數據,它會帶您遠離正在查看的頁面,並將您帶到要發送數據的頁面。起初這可能聽起來很愚蠢。爲什麼它會把你從正在查看的頁面帶走,然後將數據發送到另一個網站?如果您想在發送數據後重定向,那麼在發送數據之後,您會將它們重定向到那裏。
這樣做的原因是大大簡化了HTTP協議。每當你加載任何網站,你發送和HTTP請求。此請求包含信息的對接加載。在這個信息是:
- 您的IP地址
- 你使用
- 你上次訪問
- 你如何訪問該頁面(點擊一個鏈接或輸入網址的頁面瀏覽器是什麼地址欄)
- 您要查看的網頁(是index.html或mysite.html?)
- 與該服務器
- 任何職位信息的任何cookie(額外的服務器可能會或可能沒有要求的形成)
每當服務器收到其中一個請求時,它會查看所有信息並決定要執行的操作。通常,服務器只會查看要查看的頁面並將其發送給您。儘管如此,有時您想查看的頁面在準備展示之前還需要額外的工作。例如,如果頁面以.php
結尾,那麼它將通過頁面搜索<?php
,並且在該點之後的所有內容都將作爲腳本執行。只有腳本的輸出被髮送給請求頁面的人,而不是腳本本身。
如果您要將自己的POST信息發送到網站,請等待10分鐘,然後進入網站,但無法記住是您之前發送了發佈信息或發送了哪些信息。 Web服務器的關注時間很短。因此,如果您發送表單登錄網站,然後等待10分鐘,然後嘗試查看會員的唯一頁面 - 它會忘記您已登錄。由於這個原因,它會在您提交時向您發送頁面表格。它在它還記得你已登錄的情況下執行它,然後它有機會忘記。發送給您的頁面很可能會包含一個cookie,您可以使用它來提醒您在下次請求頁面時登錄的服務器。
如果這是有道理的,那麼你應該瞭解當你提交表單時會發生什麼。它不僅僅把你的信息提供給服務器。它會將這些信息作爲整個請求的一部分發送給服務器,然後服務器將您的網頁發送回您的瀏覽器並顯示該網頁。實際上只有一種方法可以將數據發送到服務器而不需要之後將您重定向到該服務器。然而,有多種方法可以做到這一點。您必須發送「虛擬請求」,請求具有某些POST數據的網頁,但忽略返回的網頁。
在你的例子中,你想發送數據到http://poster.decaptcher.com
。要做到這一點,不用將用戶重定向到http://poster.decaptcher.com,最簡單的解決方案就是使用javascript和AJAX。 Javascript有一些功能可以讓你在不重新加載頁面的情況下發送HTTP請求,然後讓javascript決定如何處理返回的頁面。
這通常用於當您想重新加載網頁的零件而無需重新加載整個事物。例如,如果您有聊天程序,並且想要更新聊天窗口而不刷新整個頁面。 javascript會請求一個僅包含新線聊天的網頁,減去任何<html>
,<head>
或<body>
標記。然後它將這些行顯示在聊天窗口中。
但是,您可以使用AJAX請求一個頁面,然後忽略返回的內容而不是將其顯示在頁面上。通過這樣做,您將發送POST數據,但不會重定向用戶。
另一個選擇是將請求發送到第三個網站,然後它可以發送它自己的虛擬請求。例如,將表單提交給您擁有的PHP頁面。然後PHP腳本可以告訴你的服務器發送一個虛擬請求到http://poster.decaptcher.com並忽略響應,然後你可以發送一個包含任何你想要的內容的網頁。
既然我已經充分詳細地描述了這兩個過程,我將它作爲練習讓讀者弄清楚如何做到這些。 =)
有點複製到你的最後一個問題http://stackoverflow.com/questions/3933450/get-response-from-form-post – Hannes 2010-10-14 15:27:47
想要給一個非常簡單的問題-1,但每個人都必須從某個地方開始。雖然有一個很好的答案,但似乎沒有什麼能很好地解釋這裏的混亂。 – stevendesu 2010-10-15 01:07:38