我正嘗試使用HttpPost登錄網站。我的目標是登錄並獲取網站提供的必要cookies。到目前爲止,我在「登錄」方面取得了成功,但問題仍然存在於重定向中。登錄後,我收到來自服務器的成功消息,但實際上,網站會重定向到不同的網址,並提供會話所需的Cookie。我已經檢查過該網站如何與Chrome開發者工具「協同工作」,並且我擁有必要的參數以便發佈帖子。登錄到使用JAVA/Android的網站(重定向問題)
我的客戶目前沒有收到所需的cookies,因爲它沒有跟進重定向。基本上我想知道下一步該做什麼。如何在登錄後跟進服務器重定向,以獲取所需的cookie?我應該使用什麼類/方法?我閱讀了htmlUnit,但我想避免它,因爲庫/數據量很大,我的應用程序只有0.5mb。
我現在正在做(簡體):
連接 - >登錄(httpPost) - >成功(200) - >我只接收一個 餅乾(這心不是一個我需要)。
我覺得我應該做的事情(簡體):
連接 - >登錄 - >成功(200) - >使用重定向跟進 - > 獲取餅乾(共有5 )
。
謝謝你的時間,這裏的代碼。我目前使用的cookie是不正確的。
DefaultHttpClient httpclient = new DefaultHttpClient();
HttpResponse response = null;
Log.d("LOGGING" , "Posting...");
HttpPost httpost = new HttpPost(url);
List <NameValuePair> nvps = new ArrayList <NameValuePair>();
nvps.add(new BasicNameValuePair("user", "myUser"));
nvps.add(new BasicNameValuePair("passwrd", "myPw"));
nvps.add(new BasicNameValuePair("openid_identifier", ""));
nvps.add(new BasicNameValuePair("cookielength", "-1"));
nvps.add(new BasicNameValuePair("hash_passwrd", ""));
try {
httpost.setEntity(new UrlEncodedFormEntity(nvps, HTTP.UTF_8));
} catch (UnsupportedEncodingException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
try {
Log.d("LOGGING" , "Getting login response...");
response = httpclient.execute(httpost);
} catch (ClientProtocolException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
HttpEntity entity = response.getEntity();
Log.d("LOGGING" , "Login form getStatus: " + response.getStatusLine());
List<Cookie> cookies = httpclient.getCookieStore().getCookies();
Log.d("LOGGING" , "Cookie: " + cookies.toString());
String SESSION_NAME = "PHPSESSID";
String[] sessionValue = cookies.toString().split("value: ");
String[] sessionValue1 = sessionValue[1].split("]");
String realSessionValue = sessionValue1[0].toString();
Log.d("LOGGING", "SESSION NAME:" + realSessionValue);
/*
Connection.Response loginForm = Jsoup.connect(url)
.method(Connection.Method.GET)
.referrer(referrer)
.execute();
Document login = Jsoup.connect(url)
.data("user", "myUser")
.data("passwrd", "myPw")
.data("cookielength", "1440")
.data("openid_identifier", "")
.data("hash_password", "")
.referrer(referrer)
.cookie(SESSION_NAME, realSessionValue)
.post();
*/
doc = Jsoup.connect(url)
.cookie(SESSION_NAME, realSessionValue)
.get();
//String body = doc.select("body").html();
//Log.d("LOGGING", "Body: " + body.toString());
//Check login
Elements bodies = doc.select("body").first().select("div#main-container-radio").first().select("div#radiorow").first().select("div.bghue").first().select("form#shoutbox-form-r");
Log.d("LOGGING", "Login status: " + bodies.toString());
有沒有其他方法可以做到這一點?你有任何控制網站?對不起,這不是最有效的答覆,但它確實看起來像這是一個艱難的做事方式。 – cbrulak
謝謝你的迴應。我對網站沒有任何控制權,並且很可能無法收到任何文檔。我正在嘗試爲Android(正在工作)爲他們的流創建一個非官方的廣播客戶端,現在我正在嘗試添加使用他們的Shoutbox的功能(必須在註釋之前登錄)。 – user2970008
我認爲,使用HttpClient,你必須設置默認的重定向策略。有一個例子在這篇文章中:http://stackoverflow.com/questions/3658721/httpclient-4-error-302-how-to-redirect – CodeChimp