package com.mistareader; import android.content.Context; import android.net.ConnectivityManager; import android.net.NetworkInfo; import android.util.Log; import com.mistareader.TextProcessors.S; import java.io.BufferedReader; import java.io.InputStreamReader; import java.io.OutputStream; import java.net.HttpURLConnection; import java.net.URL; import java.util.List; import java.util.Map; public class WebIteraction { static final String POST_CONNECTIONTYPE_DEFAULT = "application/x-www-form-urlencoded; charset=windows-1251"; static final String GET_ACCEPT_DEFAULT = "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8"; static final String GET_ACCEPTLANGUAGE_DEFAULT = "ru-RU"; public static final String REQUIRED_COOKIE = "document.cookie=\""; private static int DEFAULT_TIMEOUT = 10000; // "text/html, application/xml;q=0.9, application/xhtml+xml, image/png, image/webp, image/jpeg, image/gif, image/x-xbitmap, */*;q=0.1"; public static boolean isInternetAvailable(Context context) { ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); NetworkInfo activeNetwork = cm.getActiveNetworkInfo(); boolean isConnected = activeNetwork != null && activeNetwork.isConnectedOrConnecting(); return isConnected; } public static class RequestResult { public String result; public String cookie; public String sessionID; public RequestResult() { this.result = ""; } public RequestResult(String resultSrt, String cookie) { this.cookie = cookie; this.result = resultSrt; } } public static class POST { public String url; public String cookie; public String POSTString; } private static String cookiesRequired(String result) { if (result.substring(0, 6).equals("<html>") && result.contains("turn on javascript and cookies")) { int indStart = result.indexOf(REQUIRED_COOKIE); if (indStart >= 0) { int indEnd = result.indexOf(";", indStart); if (indEnd >= 0) { return result.substring(indStart + REQUIRED_COOKIE.length(), indEnd); } } } return ""; } private static String getEntr_hash(Map<String, List<String>> headerFields) { final String mHash = "entr_hash"; if (headerFields == null || headerFields.size() == 0) { return ""; } List<String> cookieList = headerFields.get("Set-Cookie"); if (cookieList != null) { for (String cookieTemp : cookieList) { if (cookieTemp.indexOf(mHash) == -1) { continue; } String[] arrayOfString = cookieTemp.split(";"); String str; int pos; for (int i = 0; i < arrayOfString.length; i++) { str = arrayOfString[i]; pos = str.indexOf(mHash); if (pos == -1) { continue; } return str.substring(pos + mHash.length() + 1); } } } return ""; } static public RequestResult postWebRequest(POST request) { RequestResult mRes = new RequestResult(); try { URL page = new URL(request.url); HttpURLConnection conn = (HttpURLConnection) page.openConnection(); setUpConnection(conn, request.cookie); conn.setRequestProperty("Content-Type", POST_CONNECTIONTYPE_DEFAULT); conn.setDoInput(true); conn.setDoOutput(true); byte[] POSTBytes = request.POSTString.getBytes(); OutputStream os = conn.getOutputStream(); os.write(POSTBytes); os.flush(); os.close(); conn.connect(); InputStreamReader in = new InputStreamReader(conn.getInputStream(), "windows-1251"); BufferedReader buff = new BufferedReader(in); StringBuffer sb = new StringBuffer(); String line; while ((line = buff.readLine()) != null) { sb.append(line); } mRes.result = sb.toString(); } catch (Exception e) { S.L("postWebRequest: " + Log.getStackTraceString(e)); } return mRes; } public static RequestResult doServerRequest(String url, String cookie, String entr_hash, String entr_id) { return doServerRequest(url, cookie + (!cookie.isEmpty() ? ";" : "") + "entr_id=" + entr_id + "; entr_hash=" + entr_hash); } static public RequestResult doServerRequest(String url, String cookie) { RequestResult res = new RequestResult("", cookie); try { // S.L("url: " + url); // S.L("req: " + cookie); URL page = new URL(url); HttpURLConnection conn = (HttpURLConnection) page.openConnection(); setUpConnection(conn, cookie); conn.getContent(); InputStreamReader in = new InputStreamReader(conn.getInputStream(), "windows-1251"); BufferedReader buff = new BufferedReader(in); StringBuffer sb = new StringBuffer(); String line; while ((line = buff.readLine()) != null) { sb.append(line); } String resultSrt = sb.toString(); String resCookie = cookiesRequired(resultSrt); if (!resCookie.isEmpty()) { S.L("req2: " + resCookie); conn.disconnect(); conn = (HttpURLConnection) page.openConnection(); setUpConnection(conn, resCookie); conn.getContent(); in = new InputStreamReader(conn.getInputStream(), "windows-1251"); buff = new BufferedReader(in); sb = new StringBuffer(); while ((line = buff.readLine()) != null) { sb.append(line); } resultSrt = sb.toString(); res.cookie = resCookie; } if (false) res.sessionID = getEntr_hash(conn.getHeaderFields()); res.result = resultSrt; return res; } catch (Exception e) { S.L("getServerResponse: " + Log.getStackTraceString(e)); return res; } } static void setUpConnection(HttpURLConnection conn, String cookie) { conn.setReadTimeout(DEFAULT_TIMEOUT); conn.setConnectTimeout(DEFAULT_TIMEOUT); conn.setRequestProperty("Accept", GET_ACCEPT_DEFAULT); conn.setRequestProperty("Accept-Language", GET_ACCEPTLANGUAGE_DEFAULT); conn.setRequestProperty("Cookie", cookie); } }