爲此,您必須發送兩個POST請求。在第一個請求中,如果成功登錄,則需要發送登錄數據並保存cookie。在第二個請求中,需要發送已保存的cookies並且您可以獲取數據。 數據爲POST格式必須是這樣的:var =值& VAR2 =數值
你的情況:
String data = "studKnNr=login&asmKodas=password";
和URL的請求:https://medeine.vgtu.lt/studentams/submit.jsp
看看下面的代碼:
String data = "studKnNr=login&asmKodas=password";
String loginUrl = "https://medeine.vgtu.lt/studentams/submit.jsp";
String Login = POST_req(loginUrl, data, 10000); /*last parameter is a limit of page content length*/
//And after succcess login you can send second request:
String pageContent = POST_req(someUrl, "", 10000);
//Methods for sending requests and saving cookie:
//(this no needs for changing, can only past to you project)
public String POST_req(String url, String post_data, int len) {
URL addr = null;
try {
addr = new URL(url);
} catch (MalformedURLException e) {
return "Некорректный URL";
}
StringBuffer data = new StringBuffer();
HttpURLConnection conn = null;
try {
conn = (HttpURLConnection) addr.openConnection();
} catch (IOException e) {
return "Open connection error";
}
conn.setRequestProperty("Connection", "keep-alive");
conn.setRequestProperty("Accept-Language", "ru,en-GB;q=0.8,en;q=0.6");
conn.setRequestProperty("Accept-Charset", "utf-8");
conn.setRequestProperty("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8");
conn.setRequestProperty("Cookie", "");
conn.setDoOutput(true);
conn.setDoInput(true);
//conn.setInstanceFollowRedirects(true);
set_cookie(conn);
//POST data:
String post_str = post_data;
data.append(post_str);
try {
conn.connect();
} catch (IOException e) {
return "Connecting error";
}
DataOutputStream dataOS = null;
try {
dataOS = new DataOutputStream(conn.getOutputStream());
} catch (IOException e2) {
return "Out stream error";
}
try {
((DataOutputStream) dataOS).writeBytes(data.toString());
} catch (IOException e) {
return "Out stream error 1";
}
/*If redirect: */
int status;
try {
status = conn.getResponseCode();
} catch (IOException e2) {
return "Response error";
}
if (status == HttpURLConnection.HTTP_MOVED_TEMP || status == HttpURLConnection.HTTP_MOVED_PERM || status == HttpURLConnection.HTTP_SEE_OTHER) {
String new_url = conn.getHeaderField("Location");
String cookies = conn.getHeaderField("Set-Cookie");
URL red_url;
try {
red_url = new URL(new_url);
} catch (MalformedURLException e) {
return "Redirect error";
}
try {
conn = (HttpURLConnection) red_url.openConnection();
} catch (IOException e) {
return "Redirect connection error";
}
//conn.setRequestProperty("Content-type", "text/html");
conn.setRequestProperty("Connection", "keep-alive");
conn.setRequestProperty("Accept-Language", "ru,en-GB;q=0.8,en;q=0.6");
conn.setRequestProperty("Accept-Charset", "utf-8");
conn.setRequestProperty("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8");
conn.setRequestProperty("Cookie", cookies);
conn.setDoOutput(true);
conn.setDoInput(true);
//conn.setInstanceFollowRedirects(true);
}
java.io.InputStream in = null;
try {
in = (java.io.InputStream) conn.getInputStream();
} catch (IOException e) {
return "In stream error";
}
InputStreamReader reader = null;
try {
reader = new InputStreamReader(in, "UTF-8");
} catch (UnsupportedEncodingException e) {
return "In stream error";
}
char[] buf = new char[len];
try {
reader.read(buf);
} catch (IOException e) {
return "In stream error";
}
get_cookie(conn);
return (new String(buf));
}
public void get_cookie(HttpURLConnection conn) {
SharedPreferences sh_pref_cookie = getSharedPreferences("cookies", Context.MODE_PRIVATE);
String cook_new;
String COOKIES_HEADER;
if (conn.getHeaderField("Set-Cookie") != null) {
COOKIES_HEADER = "Set-Cookie";
}
else {
COOKIES_HEADER = "Cookie";
}
cook_new = conn.getHeaderField(COOKIES_HEADER);
if (cook_new.indexOf("sid", 0) >= 0) {
SharedPreferences.Editor editor = sh_pref_cookie.edit();
editor.putString("Cookie", cook_new);
editor.commit();
}
}
public void set_cookie(HttpURLConnection conn) {
SharedPreferences sh_pref_cookie = getSharedPreferences("cookies", Context.MODE_PRIVATE);
String COOKIES_HEADER = "Cookie";
String cook = sh_pref_cookie.getString(COOKIES_HEADER, "no_cookie");
if (!cook.equals("no_cookie")) {
conn.setRequestProperty(COOKIES_HEADER, cook);
}
}
當然,您必須在異步線程中發送請求。
希望它有幫助。並原諒我的英語不好:)
,如果你想用你的java應用程序登錄
什麼方法你所使用的登錄。你是否在webview中加載表單以獲取用戶憑證? –
好吧,表格說:
您是否認爲使用OAuth協議?登錄後,您可以與服務器交換數據。 –