2012-04-16 52 views
0

我使用Apache的HttpClient類發佈數據到網站表單。窗體檢索使用以下幾行代碼:根據HttpGet使用Apache的HttpClient返回的表單發佈到

HttpGet get = new HttpGet(url); 
HttpResponse response = client.execute(get); 

我檢索窗體的網站需要身份驗證才能訪問窗體。如果請求未通過身份驗證,網站會將請求重定向到登錄表單頁面,隨後在成功驗證後重定向回原始頁面。

我想幹淨地檢測GET請求是否返回登錄頁面或所需的表單頁面,以便我可以POST登錄數據或表單數據。我能想到的唯一方法就是從響應實體的InputStream中讀取內容並解析每一行。但這似乎有點令人費解。我之前沒有使用Apache HttpComponents api,所以我不確定這是否是完成我想完成的唯一和最好的方法。

編輯:爲了澄清問題,我問是否有一套方法來處理與Apache的HttpClient形式。我有點知道如何實現我期待的目標,但它看起來非常難看,我希望有一種更簡單快捷的方法來實現它。例如,如果有一些方法來做到以下幾點:

HttpGet get = new HttpGet(url); 
HttpResponse response = client.execute(get); 
if(parseElements(response.getEntity()).hasFormWithId("login")) { 
    // post authentication data  
} else { 
    // post actual form data 
} 

因爲我缺乏經驗與Apache的HttpClient的API的,我不知道如果有什麼我在API中尋找對於意圖過於抽象的API。

回答

0

您可以通過設置HttpClient的參數

DefaultHttpClient client = new DefaultHttpClient(); 
client.setDefaultHttpParams(client.getParams().setBoolean(ClientPNames.HANDLE_REDIRECTS, false)); 

即禁用處理自動重定向修改HttpClient的行爲。

參見:

+0

什麼將是禁用自動重定向的優勢在哪裏?我想我在問是否有面向對象的方式來處理Apache的HttpClient的表單。我將編輯第一篇文章以包含一個示例。 – mburke13 2012-04-17 19:21:09

+0

如果您禁用未經授權的請求的自動重定向,您將在'位置'標題中獲得'HTTP狀態代碼30x'和目標位置的響應。根據響應的Http狀態代碼,您可以發送登錄信息,甚至不需要解析HTML內容。更「面向對象」的方法是實現自己的[RedirectStrategy](http://hc.apache.org/httpcomponents-client-ga/httpclient/apidocs/org/apache/http/impl/client/AbstractHttpClient.html )。策略會做類似於我上面描述的事情。 – andih 2012-04-18 02:49:22