Witam.
Mam plan na apke na androida która po wprowadzeniu loginu i hasła wyśle to jakoś na serwer strony https://adfs.edu.gdansk.pl/adfs/ls/?wa=wsignin1.0&wtrealm=urn%3asharepoint%3agpe&wctx=https%3a%2f%2fwww.edu.gdansk.pl%2f_layouts%2fauthenticate.aspx%3fsource%3dhttps%3a%2f%2fwww.edu.gdansk.pl%2fStrony%2fGPE.aspx&wreply=https%3a%2f%2fwww.edu.gdansk.pl%2f_trust%2fdefault.aspx i bede mógł JSOUP'em wyparsowac sobie dane z HTML'a. Wie ktoś jak coś takiego zrobić ?
Pozdrawiam
Tak, wyślij zapytanie HTTP do serwera z odpowiednimi parametrami.
Mógłbyś mnie dokładniej nakierować ? jakis tutorial ?
Podejrzyj sobie jak wygląda zapytanie HTTP np. Charlesem, albo Fiddlerem.
Później po prostu wysyłasz takie zapytanie.
Jak nie wiesz jak wysłać to polecam( google -> java http request).
Mam problem.Strona z ocenami to https://uonet.edu.gdansk.pl/moduluczen/OcenyZbiorczo.aspx ale żeby do niej sie dostać trzeba najpierw sie zalogować z https://adfs.edu.gdansk.pl/adfs/ls/?wa=wsignin1.0&wtrealm=urn%3asharepoint%3agpe&wctx=https%3a%2f%2fwww.edu.gdansk.pl%2f_layouts%2fauthenticate.aspx%3fsource%3dhttps%3a%2f%2fwww.edu.gdansk.pl%2fStrony%2fGPE---Aplikacje.aspx&wreply=https%3a%2f%2fwww.edu.gdansk.pl%2f_trust%2fdefault.aspx
Po zalogowaniu zostajemy przeniesieni do https://www.edu.gdansk.pl/Strony/GPE---Aplikacje.aspx
I teraz gdy chce odczytać oceny które są pod innym adresem dostaje następujący błąd
11-02 17:06:43.700 17713-17779/stasbar.com.planlekcji4h D/GetPageContent﹕ Sending 'GET' request to URL : https://uonet.edu.gdansk.pl/moduluczen/OcenyZbiorczo.aspx
11-02 17:06:43.700 17713-17779/stasbar.com.planlekcji4h D/GetPageContent﹕ Response Code : 404
11-02 17:06:43.705 17713-17779/stasbar.com.planlekcji4h W/System.err﹕ java.io.FileNotFoundException: https://uonet.edu.gdansk.pl/moduluczen/OcenyZbiorczo.aspx
11-02 17:06:43.710 17713-17779/stasbar.com.planlekcji4h W/System.err﹕ at com.android.okhttp.internal.http.HttpURLConnectionImpl.getInputStream(HttpURLConnectionImpl.java:186)
11-02 17:06:43.710 17713-17779/stasbar.com.planlekcji4h W/System.err﹕ at com.android.okhttp.internal.http.HttpsURLConnectionImpl.getInputStream(HttpsURLConnectionImpl.java:246)
11-02 17:06:43.710 17713-17779/stasbar.com.planlekcji4h W/System.err﹕ at stasbar.com.planlekcji4h.Menu$GradesAsyncTask.GetPageContent(Menu.java:448)
11-02 17:06:43.710 17713-17779/stasbar.com.planlekcji4h W/System.err﹕ at stasbar.com.planlekcji4h.Menu$GradesAsyncTask.doInBackground(Menu.java:354)
11-02 17:06:43.715 17713-17779/stasbar.com.planlekcji4h W/System.err﹕ at stasbar.com.planlekcji4h.Menu$GradesAsyncTask.doInBackground(Menu.java:326)
11-02 17:06:43.715 17713-17779/stasbar.com.planlekcji4h W/System.err﹕ at android.os.AsyncTask$2.call(AsyncTask.java:288)
11-02 17:06:43.715 17713-17779/stasbar.com.planlekcji4h W/System.err﹕ at java.util.concurrent.FutureTask.run(FutureTask.java:237)
11-02 17:06:43.715 17713-17779/stasbar.com.planlekcji4h W/System.err﹕ at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
11-02 17:06:43.715 17713-17779/stasbar.com.planlekcji4h W/System.err﹕ at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
11-02 17:06:43.715 17713-17779/stasbar.com.planlekcji4h W/System.err﹕ at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
11-02 17:06:43.715 17713-17779/stasbar.com.planlekcji4h W/System.err﹕ at java.lang.Thread.run(Thread.java:841)
Dodam że Cookies też mi wywalają błąd, wpisałem go w komentarz w kodzie przy pętli.
Kod wygląda następująco:
class GradesAsyncTask extends AsyncTask<Void,Void,Void>{
private List<String> cookies;
private HttpsURLConnection conn;
private final String USER_AGENT = "Mozilla/5.0";
@Override
protected Void doInBackground(Void... params) {
String url = "https://adfs.edu.gdansk.pl/adfs/ls/?wa=wsignin1.0&wtrealm=urn%3asharepoint%3agpe&wctx=https%3a%2f%2fwww.edu.gdansk.pl%2f_layouts%2fauthenticate.aspx%3fsource%3dhttps%3a%2f%2fwww.edu.gdansk.pl%2fStrony%2fGPE---Aplikacje.aspx&wreply=https%3a%2f%2fwww.edu.gdansk.pl%2f_trust%2fdefault.aspx";
String aplikacje = "https://www.edu.gdansk.pl/Strony/GPE---Aplikacje.aspx";
String grades = "https://uonet.edu.gdansk.pl/moduluczen/OcenyZbiorczo.aspx";
try {
// make sure cookies is turn on
CookieHandler.setDefault(new CookieManager());
// 1. Send a "GET" request, so that you can extract the form's data.
String page = GetPageContent(url);
String postParams = getFormParams(page, "MojLogin", "Moje hasło");
// 2. Construct above post's content and then send a POST request for
// authentication
sendPost(url, postParams);
// 3. success then go to aplikacje.
/* to działa
String result = GetPageContent(aplikacje);
Log.d("doInBackground RESULT", result);
*/
// 4. read grades
// to wywala blad
result = GetPageContent(grades);
Log.d("doInBackground RESULT", result);
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
private void sendPost(String url, String postParams) throws Exception {
URL obj = new URL(url);
conn = (HttpsURLConnection) obj.openConnection();
// Acts like a browser
conn.setUseCaches(false);
conn.setRequestMethod("POST");
conn.setRequestProperty("Host", "www.edu.gdansk.pl");
conn.setRequestProperty("User-Agent", USER_AGENT);
conn.setRequestProperty("Accept",
"text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8");
conn.setRequestProperty("Accept-Language", "pl,en-US;q=0.7,en;q=0.3");
/*
for (String cookie : cookies)
conn.addRequestProperty("Cookie", cookie.split(";", 1)[0]);
11-02 16:57:12.575 15758-16219/stasbar.com.planlekcji4h D/GetPageContent﹕ Sending 'GET' request to URL : https://adfs.edu.gdansk.pl/adfs/ls/?wa=wsignin1.0&wtrealm=urn%3asharepoint%3agpe&wctx=https%3a%2f%2fwww.edu.gdansk.pl%2f_layouts%2fauthenticate.aspx%3fsource%3dhttps%3a%2f%2fwww.edu.gdansk.pl%2fStrony%2fGPE---Aplikacje.aspx&wreply=https%3a%2f%2fwww.edu.gdansk.pl%2f_trust%2fdefault.aspx
11-02 16:57:12.575 15758-16219/stasbar.com.planlekcji4h D/GetPageContent﹕ Response Code : 200
11-02 16:57:12.595 15758-16219/stasbar.com.planlekcji4h D/getFormParams﹕ Extracting form's data...
11-02 16:57:12.790 15758-16219/stasbar.com.planlekcji4h W/System.err﹕ java.lang.NullPointerException
11-02 16:57:12.795 15758-16219/stasbar.com.planlekcji4h W/System.err﹕ at stasbar.com.planlekcji4h.Menu$GradesAsyncTask.sendPost(Menu.java:398)
11-02 16:57:12.795 15758-16219/stasbar.com.planlekcji4h W/System.err﹕ at stasbar.com.planlekcji4h.Menu$GradesAsyncTask.doInBackground(Menu.java:348)
11-02 16:57:12.795 15758-16219/stasbar.com.planlekcji4h W/System.err﹕ at stasbar.com.planlekcji4h.Menu$GradesAsyncTask.doInBackground(Menu.java:326)
11-02 16:57:12.795 15758-16219/stasbar.com.planlekcji4h W/System.err﹕ at android.os.AsyncTask$2.call(AsyncTask.java:288)
*/
conn.setRequestProperty("Connection", "keep-alive");
conn.setRequestProperty("Referer", "https://adfs.edu.gdansk.pl/adfs/ls/?wa=wsignin1.0&wtrealm=urn%3asharepoint%3agpe&wctx=https%3a%2f%2fwww.edu.gdansk.pl%2f_layouts%2fauthenticate.aspx%3fsource%3dhttps%3a%2f%2fwww.edu.gdansk.pl%2fStrony%2fGPE---Aplikacje.aspx&wreply=https%3a%2f%2fwww.edu.gdansk.pl%2f_trust%2fdefault.aspx");
conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
conn.setRequestProperty("Content-Length", Integer.toString(postParams.length()));
conn.setDoOutput(true);
conn.setDoInput(true);
// Send post request
DataOutputStream wr = new DataOutputStream(conn.getOutputStream());
wr.writeBytes(postParams);
wr.flush();
wr.close();
int responseCode = conn.getResponseCode();
Log.d("sendPost", "\nSending 'POST' request to URL : " + url);
Log.d("sendPost", "Post parameters : " + postParams);
Log.d("sendPost", "Response Code : " + responseCode);
BufferedReader in =
new BufferedReader(new InputStreamReader(conn.getInputStream()));
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
response.append(inputLine);
}
in.close();
Log.d("sendPost",response.toString());
}
private String GetPageContent(String url) throws Exception {
URL obj = new URL(url);
conn = (HttpsURLConnection) obj.openConnection();
// default is GET
conn.setRequestMethod("GET");
conn.setUseCaches(false);
// act like a browser
conn.setRequestProperty("User-Agent", USER_AGENT);
conn.setRequestProperty("Accept",
"text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8");
conn.setRequestProperty("Accept-Language", "pl-PL,pl;q=0.8,en-US;q=0.6,en;q=0.4");
if (cookies != null) {
for (String cookie : cookies) {
conn.addRequestProperty("Cookie", cookie.split(";", 1)[0]);
}
}
int responseCode = conn.getResponseCode();
Log.d("GetPageContent","\nSending 'GET' request to URL : " + url);
Log.d("GetPageContent", "Response Code : " + responseCode);
BufferedReader in =
new BufferedReader(new InputStreamReader(conn.getInputStream()));
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
response.append(inputLine);
}
in.close();
// Get the response cookies
setCookies(conn.getHeaderFields().get("Set-Cookie"));
return response.toString();
}
public String getFormParams(String html, String username, String password)
throws UnsupportedEncodingException {
Log.d("getFormParams", "Extracting form's data...");
Document doc = Jsoup.parse(html);
// Google form id
Element loginform = doc.getElementById("tableUserCredentials");
Elements inputElements = loginform.getElementsByTag("input");
List<String> paramList = new ArrayList<String>();
for (Element inputElement : inputElements) {
String key = inputElement.attr("name");
String value = inputElement.attr("value");
if (key.equals("UsernameTextBox")){
value = username;
paramList.add(key + "=" + URLEncoder.encode(value, "UTF-8"));
}
else if (key.equals("PasswordTextBox")) {
value = password;
paramList.add(key + "=" + URLEncoder.encode(value, "UTF-8"));
}
}
// build parameters list
StringBuilder result = new StringBuilder();
for (String param : paramList) {
if (result.length() == 0) {
result.append(param);
} else {
result.append("&" + param);
}
}
return result.toString();
}
public List<String> getCookies() {
return cookies;
}
public void setCookies(List<String> cookies2) {
cookies = cookies2;
}
}
11-02 17:06:43.700 17713-17779/stasbar.com.planlekcji4h D/GetPageContent﹕ Sending 'GET' request to URL : https://uonet.edu.gdansk.pl/moduluczen/OcenyZbiorczo.aspx
11-02 17:06:43.700 17713-17779/stasbar.com.planlekcji4h D/GetPageContent﹕ Response Code : 404
jestes w ogole zalogowany?
Trochę źle napisałem ten post.
Chodzi o to że po wysłaniu requesta do zalogowania sie przechodzi on pomyslnie i moge odczytać zawartość z https://www.edu.gdansk.pl/Strony/GPE---Aplikacje.aspx ale z tej strony z ocenami już nie, moje przypuszczenia to to, że sesja wygasa albo to, że się zalogowałem, jest przechowywane w ciasteczkach które u mnie wywalają error, dlatego je wyłączyłem albo do zalogowania sie na tą podstrone https://uonet.edu.gdansk.pl/moduluczen/start.aspx wymagany jest kolejny request.
Oto struktura tej strony bo może sie wydawać troche skomplikowane :D
Loguje sie
Po pomyślnym zalogowaniu, przenosi mnie do tej strony. Klikam w odnośnik "Aplikacja Uczniowska" i zostaje oowarta nowa karta z tą podstroną.
Dalej klikam z menu na Oceny i Jsoupem parsuje siebie tablice z ocenami (to umiem)
Pokarze jak wygląda cały Log.d
11-02 18:31:14.978 25828-25988/stasbar.com.planlekcji4h D/GetPageContent﹕ Sending 'GET' request to URL : https://adfs.edu.gdansk.pl/adfs/ls/?wa=wsignin1.0&wtrealm=urn%3asharepoint%3agpe&wctx=https%3a%2f%2fwww.edu.gdansk.pl%2f_layouts%2fauthenticate.aspx%3fsource%3dhttps%3a%2f%2fwww.edu.gdansk.pl%2fStrony%2fGPE---Aplikacje.aspx&wreply=https%3a%2f%2fwww.edu.gdansk.pl%2f_trust%2fdefault.aspx
11-02 18:31:14.983 25828-25988/stasbar.com.planlekcji4h D/GetPageContent﹕ Response Code : 200
11-02 18:31:14.988 25828-25988/stasbar.com.planlekcji4h D/doInBackground RESULT﹕ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 <--------10lini kodu html czyli działa
11-02 18:31:14.988 25828-25988/stasbar.com.planlekcji4h D/getFormParams﹕ Extracting form's data...
11-02 18:31:15.388 25828-25988/stasbar.com.planlekcji4h D/sendPost﹕ Sending 'POST' request to URL : https://adfs.edu.gdansk.pl/adfs/ls/?wa=wsignin1.0&wtrealm=urn%3asharepoint%3agpe&wctx=https%3a%2f%2fwww.edu.gdansk.pl%2f_layouts%2fauthenticate.aspx%3fsource%3dhttps%3a%2f%2fwww.edu.gdansk.pl%2fStrony%2fGPE---Aplikacje.aspx&wreply=https%3a%2f%2fwww.edu.gdansk.pl%2f_trust%2fdefault.aspx
11-02 18:31:15.388 25828-25988/stasbar.com.planlekcji4h D/sendPost﹕ Post parameters : UsernameTextBox=MojLogin&PasswordTextBox=MojeHaslo
11-02 18:31:15.388 25828-25988/stasbar.com.planlekcji4h D/sendPost﹕ Response Code : 200
11-02 18:31:15.388 25828-25988/stasbar.com.planlekcji4h D/sendPost﹕ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 <--------10lini kodu html czyli działa
11-02 18:31:18.143 25828-25988/stasbar.com.planlekcji4h D/GetPageContent﹕ Sending 'GET' request to URL : https://www.edu.gdansk.pl/Strony/GPE---Aplikacje.aspx
11-02 18:31:18.143 25828-25988/stasbar.com.planlekcji4h D/GetPageContent﹕ Response Code : 200
11-02 18:31:18.193 25828-25988/stasbar.com.planlekcji4h D/doInBackground RESULT﹕ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 <--------10lini kodu html czyli działa
11-02 18:31:19.073 25828-25988/stasbar.com.planlekcji4h D/GetPageContent﹕ Sending 'GET' request to URL : https://uonet.edu.gdansk.pl/moduluczen/OcenyZbiorczo.aspx
11-02 18:31:19.073 25828-25988/stasbar.com.planlekcji4h D/GetPageContent﹕ Response Code : 404
11-02 18:31:19.078 25828-25988/stasbar.com.planlekcji4h W/System.err﹕ java.io.FileNotFoundException: https://uonet.edu.gdansk.pl/moduluczen/OcenyZbiorczo.aspx
11-02 18:31:19.108 25828-25988/stasbar.com.planlekcji4h W/System.err﹕ at com.android.okhttp.internal.http.HttpURLConnectionImpl.getInputStream(HttpURLConnectionImpl.java:186)
11-02 18:31:19.108 25828-25988/stasbar.com.planlekcji4h W/System.err﹕ at com.android.okhttp.internal.http.HttpsURLConnectionImpl.getInputStream(HttpsURLConnectionImpl.java:246)
11-02 18:31:19.108 25828-25988/stasbar.com.planlekcji4h W/System.err﹕ at stasbar.com.planlekcji4h.Menu$GradesAsyncTask.GetPageContent(Menu.java:448)
11-02 18:31:19.113 25828-25988/stasbar.com.planlekcji4h W/System.err﹕ at stasbar.com.planlekcji4h.Menu$GradesAsyncTask.doInBackground(Menu.java:354)
11-02 18:31:19.113 25828-25988/stasbar.com.planlekcji4h W/System.err﹕ at stasbar.com.planlekcji4h.Menu$GradesAsyncTask.doInBackground(Menu.java:326)
11-02 18:31:19.113 25828-25988/stasbar.com.planlekcji4h W/System.err﹕ at android.os.AsyncTask$2.call(AsyncTask.java:288)
11-02 18:31:19.113 25828-25988/stasbar.com.planlekcji4h W/System.err﹕ at java.util.concurrent.FutureTask.run(FutureTask.java:237)
11-02 18:31:19.113 25828-25988/stasbar.com.planlekcji4h W/System.err﹕ at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
11-02 18:31:19.113 25828-25988/stasbar.com.planlekcji4h W/System.err﹕ at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
11-02 18:31:19.113 25828-25988/stasbar.com.planlekcji4h W/System.err﹕ at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
11-02 18:31:19.113 25828-25988/stasbar.com.planlekcji4h W/System.err﹕ at java.lang.Thread.run(Thread.java:841)
Zauważyłem coś ważnego.
Te strony są przekierowywane 3 razy
Może ktoś mi pomóc z ustawieniem tych zapytań ? na internecie nie ma tego za dużo.