2013-11-22 101 views
0

我想從需要在頁面中登錄的網頁獲取一些數據。我可以用htmlunit做,但給我的問題在Android上導入這些庫。所以我試圖用apache http客戶端來做到這一點。Android登錄和重定向

HttpClient httpClient = new DefaultHttpClient(); 
HttpPost httpPost = new HttpPost("https://inside.cineca.it/cgi-bin/uinside/marcature.pl"); 
BasicNameValuePair usernameBasicNameValuePair = new BasicNameValuePair("j_username", "user"); 
BasicNameValuePair passwordBasicNameValuePAir = new BasicNameValuePair("j_password", "pass"); 

List<NameValuePair> nameValuePairList = new ArrayList<NameValuePair>(); 
nameValuePairList.add(usernameBasicNameValuePair); 
nameValuePairList.add(passwordBasicNameValuePAir); 
UrlEncodedFormEntity urlEncodedFormEntity = new UrlEncodedFormEntity(nameValuePairList); 
HttpResponse httpResponse = httpClient.execute(httpPost); 
System.out.println(EntityUtils.toString(httpResponse.getEntity())); 

但是給我錯誤。我很害怕我應該管理重定向,但我不知道如何。如果有人能給我一些建議,我會很高興。 致以問候

+0

請給出錯誤日誌。 – guydemossyrock

回答

0

您正在執行登錄頁面的http POST。也許向您返回登錄頁面的服務器不知道處理該帖子。無論如何,我相信你的意圖是實際執行登錄。您需要弄清楚什麼是服務器API,您應該在哪裏發佈憑證並處理結果。使用Chrome Network Profiler執行快速調查,以上鍊接的登錄API實際位於:https://idp-is.cineca.it/idp/Authn/Multilogin。這是您應該使用的URL,並且您需要POST的地方。

此外,請確保您所做的請求是在非UI線程上完成的,因爲這是初學者常犯的錯誤。

+0

所以我應該改變HttpPost httpPost = new HttpPost(「https://inside.cineca.it/cgi-bin/uinside/marcature.pl」);與HttpPost httpPost =新的HttpPost(「https://idp-is.cineca.it/idp/Authn/Multilogin」);我有點迷路,如果你有一些例子會很棒! – user3021294

+0

...至少這是改變網址的起點 – gunar

+0

沒辦法......用這種方法不是打印System.out.println(EntityUtils.toString(httpResponse.getEntity()));你能解釋還是說我或多或少應該做什麼? – user3021294