我使用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。
什麼將是禁用自動重定向的優勢在哪裏?我想我在問是否有面向對象的方式來處理Apache的HttpClient的表單。我將編輯第一篇文章以包含一個示例。 – mburke13 2012-04-17 19:21:09
如果您禁用未經授權的請求的自動重定向,您將在'位置'標題中獲得'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