重新 HttpHelper
This commit is contained in:
1 parent
3f099969d1
commit
ce786f4e41
5 files changed
+365
-349
No files matched your search
@@ -65,7 +65,6 @@ public class AppContext extends Application implements UncaughtExceptionHandler
|
||||
Favorite.init(this);
|
||||
|
||||
mData = new Data(this);
|
||||
HttpHelper.setCookieHelper(this);
|
||||
mImageGeterManager = new ImageGeterManager(this, Cache.memoryCache, Cache.diskCache);
|
||||
LoadImageView.setImageGeterManager(mImageGeterManager);
|
||||
|
||||
|
||||
@@ -371,7 +371,7 @@ public class EhClient {
|
||||
new String[] { "CookieDate", "1" },
|
||||
new String[] { "temporary_https", "on" }};
|
||||
HttpHelper hp = new HttpHelper(mAppContext);
|
||||
String pageContent = hp.post(loginUrl, args);
|
||||
String pageContent = hp.postForm(loginUrl, args);
|
||||
if (pageContent != null) {
|
||||
if (pageContent.contains("<p>You are now logged in as: "))
|
||||
ok = true;
|
||||
@@ -473,7 +473,7 @@ public class EhClient {
|
||||
public void onSuccess();
|
||||
public void onFailure(String eMsg);
|
||||
}
|
||||
|
||||
/*
|
||||
public void testEx(final OnTestExListener listener) {
|
||||
new Thread(new Runnable() {
|
||||
@Override
|
||||
@@ -496,7 +496,7 @@ public class EhClient {
|
||||
}
|
||||
}).start();
|
||||
}
|
||||
|
||||
*/
|
||||
// Logout
|
||||
private class LogoutPackage {
|
||||
public boolean ok;
|
||||
@@ -1483,7 +1483,7 @@ public class EhClient {
|
||||
listener.onFailure(eMsg); // TODO
|
||||
}
|
||||
});
|
||||
hp.post(detailUrl, new String[][]{
|
||||
hp.postForm(detailUrl, new String[][]{
|
||||
new String[]{"commenttext", comment},
|
||||
new String[]{"postcomment", "Post New"}});
|
||||
}
|
||||
@@ -1654,7 +1654,7 @@ public class EhClient {
|
||||
catStr = "0";
|
||||
|
||||
// submit=Add+to+Favorites is not necessary, just use submit=Apply+Changes all the time
|
||||
hp.post(getAddFavouriteUrl(gid, token), new String[][]{
|
||||
hp.postForm(getAddFavouriteUrl(gid, token), new String[][]{
|
||||
new String[]{"favcat", catStr},
|
||||
new String[]{"favnote", note == null ? "" : note},
|
||||
new String[]{"submit", "Apply Changes"}});
|
||||
@@ -1779,7 +1779,7 @@ public class EhClient {
|
||||
args[i] = new String[]{"modifygids[]", String.valueOf(gids[i-1])};
|
||||
args[i] = new String[]{"apply", "Apply"};
|
||||
|
||||
hp.post(getFavoriteUrl(srcCat, 0), args);
|
||||
hp.postForm(getFavoriteUrl(srcCat, 0), args);
|
||||
}
|
||||
}).start();
|
||||
}
|
||||
|
||||
@@ -0,0 +1,192 @@
|
||||
/*
|
||||
* Copyright (C) 2014 Hippo Seven
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package com.hippo.ehviewer.ehclient;
|
||||
|
||||
import java.net.HttpURLConnection;
|
||||
import java.util.List;
|
||||
|
||||
import android.content.Context;
|
||||
import android.content.SharedPreferences;
|
||||
import android.util.Log;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author Hippo
|
||||
*
|
||||
*/
|
||||
public class EhInfo {
|
||||
|
||||
private static final String TAG = EhInfo.class.getSimpleName();
|
||||
private static final String PREF_NAME = "eh_info";
|
||||
|
||||
public static final String[] COOKIABLE_HOSTS = {"exhentai.org",
|
||||
"g.e-hentai.org", "forums.e-hentai.org"};
|
||||
|
||||
private static final String KEY_DEFAULT_CAT = "default_cat";
|
||||
private static final int DEFAULT_DEFAULT_CAT = 0;
|
||||
|
||||
// m for normal, l for large
|
||||
private static final String KEY_PREVIEW_MODE = "preview_mode";
|
||||
private static final String DEFAULT_PREVIEW_MODE = "m";
|
||||
|
||||
/**
|
||||
* reclass 0x1
|
||||
* language 0x2
|
||||
* parody 0x4
|
||||
* character 0x8
|
||||
* group 0x10
|
||||
* artist 0x20
|
||||
* male 0x40
|
||||
* female 0x80
|
||||
*/
|
||||
private static final String KEY_EXCLUDE_TAG_GROUP = "exculde_tag_group";
|
||||
private static final int DEFAULT_EXCLUDE_TAG_GROUP = 0;
|
||||
|
||||
/**
|
||||
* Original Translated Rewrite All
|
||||
* Japanese 1024 2048
|
||||
* English 1 1025 2049
|
||||
* Chinese 10 1034 2058
|
||||
* Dutch 20 1044 2068
|
||||
* French 30 1054 2078
|
||||
* German 40 1064 2088
|
||||
* Hungarian 50 1074 2098
|
||||
* Italian 60 1084 2108
|
||||
* Korean 70 1094 2118
|
||||
* Polish 80 1104 2128
|
||||
* Portuguese 90 1114 2138
|
||||
* Russian 100 1124 2148
|
||||
* Spanish 110 1134 2158
|
||||
* Thai 120 1144 2168
|
||||
* Vietnamese 130 1154 2178
|
||||
* Other 255 1279 2303
|
||||
*/
|
||||
private static final String KEY_EXCLUDE_LANGUAGE = "exculde_tag_group";
|
||||
private static final String DEFAULT_EXCLUDE_LANGUAGE = "";
|
||||
|
||||
private static final String KEY_LOGIN = "login";
|
||||
private static final boolean DEFAULT_LOGIN = false;
|
||||
private static final String KEY_USERNAME = "username";
|
||||
private static final String DEFAULT_USERNAME = "Hippo";
|
||||
|
||||
|
||||
private Context mContext;
|
||||
private final SharedPreferences mInfoPref;
|
||||
private String mUconfig;
|
||||
|
||||
private static EhInfo sInstance;
|
||||
|
||||
private EhInfo(final Context context){
|
||||
mContext = context;
|
||||
mInfoPref = mContext.getSharedPreferences(PREF_NAME, 0);
|
||||
|
||||
updateUconfig();
|
||||
};
|
||||
|
||||
private void updateUconfig() {
|
||||
mUconfig = "cats_" + mInfoPref.getInt(KEY_DEFAULT_CAT, DEFAULT_DEFAULT_CAT)
|
||||
+ "-ts_" + mInfoPref.getString(KEY_PREVIEW_MODE, DEFAULT_PREVIEW_MODE)
|
||||
+ "-xns_" + mInfoPref.getInt(KEY_EXCLUDE_TAG_GROUP, DEFAULT_EXCLUDE_TAG_GROUP)
|
||||
+ "-xl_" + mInfoPref.getString(KEY_EXCLUDE_LANGUAGE, DEFAULT_EXCLUDE_LANGUAGE)
|
||||
+ "-tl_m-uh_y-tr_2-prn_n-dm_l-ar_0-rc_0-rx_0-ry_0-sa_y-oi_n-qb_n-tf_n-hp_-hk_-ms_n-mt_n";
|
||||
}
|
||||
|
||||
public final static EhInfo getInstance(final Context context) {
|
||||
if (sInstance == null)
|
||||
sInstance = new EhInfo(context.getApplicationContext());
|
||||
return sInstance;
|
||||
}
|
||||
|
||||
private String getCookie(String cookieStr, String key) {
|
||||
String value = null;
|
||||
int index1 = -1;
|
||||
int index2 = -1;
|
||||
|
||||
if ((index1 = cookieStr.indexOf(key + "=")) != -1) {
|
||||
index1 += key.length() + 1; // size of key + "="
|
||||
if ((index2 = cookieStr.indexOf(";", index1)) != -1)
|
||||
value = cookieStr.substring(index1, index2);
|
||||
else
|
||||
value = cookieStr.substring(index1);
|
||||
}
|
||||
return value;
|
||||
}
|
||||
|
||||
public void storeCookie(HttpURLConnection conn) {
|
||||
String ipb_member_id;
|
||||
String ipb_pass_hash;
|
||||
SharedPreferences.Editor editor = mInfoPref.edit();
|
||||
|
||||
List<String> cookieList = conn.getHeaderFields().get("Set-Cookie");
|
||||
for (String str : cookieList) {
|
||||
ipb_member_id = getCookie(str, "ipb_member_id");
|
||||
ipb_pass_hash = getCookie(str, "ipb_pass_hash");
|
||||
|
||||
if (ipb_member_id != null)
|
||||
editor.putString("ipb_member_id", ipb_member_id);
|
||||
if (ipb_pass_hash != null)
|
||||
editor.putString("ipb_pass_hash", ipb_pass_hash);
|
||||
}
|
||||
editor.apply();
|
||||
}
|
||||
|
||||
public void setCookie(HttpURLConnection conn) {
|
||||
String cookie = "ipb_member_id=" + mInfoPref.getString("ipb_member_id", "ipb_member_id") +
|
||||
"; ipb_pass_hash=" + mInfoPref.getString("ipb_pass_hash", "ipb_pass_hash") +
|
||||
"; uconfig="+ mUconfig;
|
||||
conn.setRequestProperty("Cookie", cookie);
|
||||
}
|
||||
|
||||
public boolean isLogin() {
|
||||
return mInfoPref.getBoolean(KEY_LOGIN, DEFAULT_LOGIN);
|
||||
}
|
||||
|
||||
public void login(String username) {
|
||||
mInfoPref.edit().putBoolean(KEY_LOGIN, true)
|
||||
.putString(KEY_USERNAME, username).apply();
|
||||
}
|
||||
|
||||
public void logout() {
|
||||
mInfoPref.edit().putBoolean(KEY_LOGIN, false)
|
||||
.putString("ipb_member_id", "ipb_member_id")
|
||||
.putString("ipb_pass_hash", "ipb_pass_hash").apply();
|
||||
}
|
||||
|
||||
public String getUsername() {
|
||||
return mInfoPref.getString(KEY_USERNAME, DEFAULT_USERNAME);
|
||||
}
|
||||
|
||||
public void setDefaultCat(int defaultCat) {
|
||||
mInfoPref.edit().putInt(KEY_DEFAULT_CAT, defaultCat).commit();
|
||||
updateUconfig();
|
||||
}
|
||||
|
||||
public void setPreviewMode(String previewMode) {
|
||||
mInfoPref.edit().putString(KEY_PREVIEW_MODE, previewMode).commit();
|
||||
updateUconfig();
|
||||
}
|
||||
|
||||
public void setExcludeTagGroup(int excludeTagGroup) {
|
||||
mInfoPref.edit().putInt(KEY_EXCLUDE_TAG_GROUP, excludeTagGroup).commit();
|
||||
updateUconfig();
|
||||
}
|
||||
|
||||
public void setExcludeLanguage(String excludeLanguage) {
|
||||
mInfoPref.edit().putString(KEY_EXCLUDE_LANGUAGE, excludeLanguage).commit();
|
||||
updateUconfig();
|
||||
}
|
||||
}
|
||||
@@ -74,12 +74,10 @@ public class ListParser {
|
||||
if (m.group(3) == null) {
|
||||
gi.thumb = "http://"
|
||||
+ m.group(5).replace('~', '/');
|
||||
gi.title = StringEscapeUtils.unescapeHtml4(m
|
||||
.group(6));
|
||||
gi.title = m.group(6);
|
||||
} else {
|
||||
gi.thumb = m.group(3);
|
||||
gi.title = StringEscapeUtils.unescapeHtml4(m
|
||||
.group(4));
|
||||
gi.title = m.group(4);
|
||||
}
|
||||
|
||||
Pattern pattern = Pattern
|
||||
|
||||
@@ -26,6 +26,7 @@ import java.net.CookieManager;
|
||||
import java.net.CookiePolicy;
|
||||
import java.net.HttpURLConnection;
|
||||
import java.net.MalformedURLException;
|
||||
import java.net.ProtocolException;
|
||||
import java.net.SocketException;
|
||||
import java.net.SocketTimeoutException;
|
||||
import java.net.URL;
|
||||
@@ -40,6 +41,8 @@ import org.json.JSONObject;
|
||||
|
||||
import com.hippo.ehviewer.DiskCache;
|
||||
import com.hippo.ehviewer.R;
|
||||
import com.hippo.ehviewer.ehclient.EhClient;
|
||||
import com.hippo.ehviewer.ehclient.EhInfo;
|
||||
import com.hippo.ehviewer.exception.RedirectionException;
|
||||
import com.hippo.ehviewer.exception.ResponseCodeException;
|
||||
import com.hippo.ehviewer.exception.SadPandaException;
|
||||
@@ -65,7 +68,7 @@ import com.hippo.ehviewer.util.Log;
|
||||
public class HttpHelper {
|
||||
private static final String TAG = "HttpHelper";
|
||||
public static final String SAD_PANDA_ERROR = "Sad Panda";
|
||||
|
||||
public static final String HAPPY_PANDA_BODY = "Happy Panda";
|
||||
|
||||
private static String DEFAULT_CHARSET = "utf-8";
|
||||
private static String CHARSET_KEY = "charset=";
|
||||
@@ -109,11 +112,6 @@ public class HttpHelper {
|
||||
mContext = context;
|
||||
}
|
||||
|
||||
public static void setCookieHelper(Context context) {
|
||||
CookieManager cookieManager = new CookieManager(new ShapreCookieStore(context), CookiePolicy.ACCEPT_ALL);
|
||||
CookieHandler.setDefault(cookieManager);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get last error message
|
||||
* @return
|
||||
@@ -192,20 +190,28 @@ public class HttpHelper {
|
||||
return pageContext;
|
||||
}
|
||||
|
||||
public String get(String urlStr) {
|
||||
private boolean isUrlCookiable(URL url) {
|
||||
String host = url.getHost();
|
||||
for (String h : EhInfo.COOKIABLE_HOSTS) {
|
||||
if (h.equals(host))
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
private String requst(RequestHelper rh, String urlStr) {
|
||||
mException = null;
|
||||
|
||||
int redirectionCount = 0;
|
||||
URL url = null;
|
||||
HttpURLConnection conn = null;
|
||||
Message msg = null;
|
||||
|
||||
if (mListener != null)
|
||||
msg = new Message();
|
||||
try {
|
||||
|
||||
Log.d(TAG, "Http get " + urlStr);
|
||||
|
||||
Log.d(TAG, "Requst " + urlStr);
|
||||
url = new URL(urlStr);
|
||||
boolean isCookiable = isUrlCookiable(url);
|
||||
while (redirectionCount++ < Constant.MAX_REDIRECTS) {
|
||||
conn = (HttpURLConnection) url.openConnection();
|
||||
conn.setInstanceFollowRedirects(true);
|
||||
@@ -213,9 +219,13 @@ public class HttpHelper {
|
||||
conn.setRequestProperty("User-Agent", Constant.userAgent);
|
||||
conn.setConnectTimeout(Constant.DEFAULT_TIMEOUT);
|
||||
conn.setReadTimeout(Constant.DEFAULT_TIMEOUT);
|
||||
conn.setRequestProperty("Connection", "close");
|
||||
conn.connect();
|
||||
// Set cookie if necessary
|
||||
if (isCookiable)
|
||||
EhInfo.getInstance(mContext).setCookie(conn);
|
||||
// Do custom staff
|
||||
rh.onBeforeConnect(conn);
|
||||
|
||||
conn.connect();
|
||||
final int responseCode = conn.getResponseCode();
|
||||
switch (responseCode) {
|
||||
case HttpURLConnection.HTTP_OK:
|
||||
@@ -224,18 +234,24 @@ public class HttpHelper {
|
||||
String contentType = conn.getHeaderField("Content-Type");
|
||||
if (contentType != null && contentType.equals("image/gif"))
|
||||
throw new SadPandaException();
|
||||
|
||||
String pageContext = getPageContext(conn);
|
||||
// Store cookie if necessary
|
||||
if (isCookiable)
|
||||
EhInfo.getInstance(mContext).storeCookie(conn);
|
||||
// Get body if necessary
|
||||
String body = rh.isNeedBody();
|
||||
if (body == null)
|
||||
body = getPageContext(conn);
|
||||
// Send to UI thread if necessary
|
||||
if (msg != null) {
|
||||
Package p = new Package();
|
||||
p.listener = mListener;
|
||||
p.str = pageContext;
|
||||
p.str = body;
|
||||
msg.obj = p;
|
||||
msg.what = Constants.TRUE;
|
||||
mHandler.sendMessage(msg);
|
||||
}
|
||||
return pageContext;
|
||||
|
||||
return body;
|
||||
// redirect
|
||||
case HttpURLConnection.HTTP_MOVED_PERM:
|
||||
case HttpURLConnection.HTTP_MOVED_TEMP:
|
||||
case HttpURLConnection.HTTP_SEE_OTHER:
|
||||
@@ -248,7 +264,7 @@ public class HttpHelper {
|
||||
throw new ResponseCodeException(responseCode);
|
||||
}
|
||||
}
|
||||
} catch (Exception e) {
|
||||
} catch (Exception e) {
|
||||
mException = e;
|
||||
e.printStackTrace();
|
||||
|
||||
@@ -265,346 +281,157 @@ public class HttpHelper {
|
||||
if (conn != null)
|
||||
conn.disconnect();
|
||||
}
|
||||
|
||||
mException = new RedirectionException();
|
||||
return null;
|
||||
}
|
||||
|
||||
public String contentType(String urlStr) {
|
||||
mException = null;
|
||||
|
||||
int redirectionCount = 0;
|
||||
URL url = null;
|
||||
HttpURLConnection conn = null;
|
||||
Message msg = null;
|
||||
if (mListener != null)
|
||||
msg = new Message();
|
||||
try {
|
||||
|
||||
Log.d(TAG, "Http head " + urlStr);
|
||||
|
||||
url = new URL(urlStr);
|
||||
while (redirectionCount++ < Constant.MAX_REDIRECTS) {
|
||||
conn = (HttpURLConnection) url.openConnection();
|
||||
conn.setInstanceFollowRedirects(true);
|
||||
conn.connect();
|
||||
|
||||
String contentType = conn.getHeaderField("Content-Type");
|
||||
contentType = contentType == null ? "" : contentType;
|
||||
if (msg != null) {
|
||||
Package p = new Package();
|
||||
p.listener = mListener;
|
||||
p.str = contentType;
|
||||
msg.obj = p;
|
||||
msg.what = Constants.TRUE;
|
||||
mHandler.sendMessage(msg);
|
||||
}
|
||||
return contentType;
|
||||
}
|
||||
} catch (Exception e) {
|
||||
mException = e;
|
||||
e.printStackTrace();
|
||||
|
||||
if (msg != null) {
|
||||
Package p = new Package();
|
||||
p.listener = mListener;
|
||||
p.str = getEMsg();
|
||||
msg.obj = p;
|
||||
msg.what = Constants.FALSE;
|
||||
mHandler.sendMessage(msg);
|
||||
}
|
||||
return null;
|
||||
} finally {
|
||||
if (conn != null)
|
||||
conn.disconnect();
|
||||
interface RequestHelper {
|
||||
public void onBeforeConnect(HttpURLConnection conn) throws Exception;
|
||||
/**
|
||||
* If need body, return null, otherwise return a string used as body
|
||||
* @return
|
||||
*/
|
||||
public String isNeedBody();
|
||||
}
|
||||
|
||||
/**
|
||||
* RequstHelper for check sad panda, use HEAD method
|
||||
*/
|
||||
private class CheckSpHelper implements RequestHelper {
|
||||
@Override
|
||||
public void onBeforeConnect(HttpURLConnection conn)
|
||||
throws ProtocolException {
|
||||
conn.setRequestMethod("HEAD");
|
||||
}
|
||||
|
||||
mException = new RedirectionException();
|
||||
return null;
|
||||
@Override
|
||||
public String isNeedBody() {
|
||||
return HAPPY_PANDA_BODY;
|
||||
}
|
||||
}
|
||||
|
||||
public String post(String urlStr, String[][] args) {
|
||||
mException = null;
|
||||
|
||||
int redirectionCount = 0;
|
||||
URL url = null;
|
||||
HttpURLConnection conn = null;
|
||||
|
||||
Message msg = null;
|
||||
if (mListener != null)
|
||||
msg = new Message();
|
||||
|
||||
try {
|
||||
|
||||
Log.d(TAG, "Http post " + urlStr);
|
||||
|
||||
url = new URL(urlStr);
|
||||
while (redirectionCount++ < Constant.MAX_REDIRECTS) {
|
||||
conn = (HttpURLConnection) url.openConnection();
|
||||
conn.addRequestProperty("Accept-Encoding", "gzip");
|
||||
conn.setRequestProperty("User-Agent", Constant.userAgent);
|
||||
conn.setConnectTimeout(Constant.DEFAULT_TIMEOUT);
|
||||
conn.setReadTimeout(Constant.DEFAULT_TIMEOUT);
|
||||
conn.setDoOutput(true);
|
||||
conn.setDoInput(true);
|
||||
conn.setRequestMethod("POST");
|
||||
conn.setUseCaches(false);
|
||||
conn.setInstanceFollowRedirects(true);
|
||||
conn.setRequestProperty("Content-Type",
|
||||
"application/x-www-form-urlencoded");
|
||||
conn.setRequestProperty("Connection", "close");
|
||||
|
||||
DataOutputStream out = new DataOutputStream(conn.getOutputStream());
|
||||
StringBuilder sb = new StringBuilder();
|
||||
int i = 0;
|
||||
for (String[] arg : args) {
|
||||
if (i != 0)
|
||||
sb.append("&");
|
||||
sb.append(URLEncoder.encode(arg[0], "UTF-8"));
|
||||
sb.append("=");
|
||||
sb.append(URLEncoder.encode(arg[1], "UTF-8"));
|
||||
i++;
|
||||
}
|
||||
Log.d(TAG, sb.toString());
|
||||
out.writeBytes(sb.toString());
|
||||
out.flush();
|
||||
out.close();
|
||||
|
||||
conn.connect();
|
||||
|
||||
final int responseCode = conn.getResponseCode();
|
||||
switch (responseCode) {
|
||||
case HttpURLConnection.HTTP_OK:
|
||||
case HttpURLConnection.HTTP_PARTIAL:
|
||||
// Test sad panda
|
||||
String contentType = conn.getHeaderField("Content-Type");
|
||||
if (contentType != null && contentType.equals("image/gif"))
|
||||
throw new SadPandaException();
|
||||
|
||||
String pageContext = getPageContext(conn);
|
||||
if (msg != null) {
|
||||
Package p = new Package();
|
||||
p.listener = mListener;
|
||||
p.str = pageContext;
|
||||
msg.obj = p;
|
||||
msg.what = Constants.TRUE;
|
||||
mHandler.sendMessage(msg);
|
||||
}
|
||||
return pageContext;
|
||||
|
||||
case HttpURLConnection.HTTP_MOVED_PERM:
|
||||
case HttpURLConnection.HTTP_MOVED_TEMP:
|
||||
case HttpURLConnection.HTTP_SEE_OTHER:
|
||||
case Constant.HTTP_TEMP_REDIRECT:
|
||||
final String location = conn.getHeaderField("Location");
|
||||
url = new URL(url, location);
|
||||
continue;
|
||||
|
||||
default:
|
||||
throw new ResponseCodeException(responseCode);
|
||||
}
|
||||
}
|
||||
} catch (Exception e) {
|
||||
mException = e;
|
||||
e.printStackTrace();
|
||||
|
||||
if (msg != null) {
|
||||
Package p = new Package();
|
||||
p.listener = mListener;
|
||||
p.str = getEMsg();
|
||||
msg.obj = p;
|
||||
msg.what = Constants.FALSE;
|
||||
mHandler.sendMessage(msg);
|
||||
}
|
||||
/**
|
||||
* RequstHelper for GET method
|
||||
*/
|
||||
private class GetHelper implements RequestHelper {
|
||||
@Override
|
||||
public void onBeforeConnect(HttpURLConnection conn)
|
||||
throws ProtocolException {
|
||||
conn.setRequestMethod("GET");
|
||||
}
|
||||
@Override
|
||||
public String isNeedBody() {
|
||||
return null;
|
||||
} finally {
|
||||
if (conn != null)
|
||||
conn.disconnect();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* RequstHelper for post form data, use POST method
|
||||
*/
|
||||
private class PostFormHelper implements RequestHelper {
|
||||
private String[][] mArgs;
|
||||
|
||||
public PostFormHelper(String[][] args) {
|
||||
mArgs = args;
|
||||
}
|
||||
|
||||
mException = new RedirectionException();
|
||||
return null;
|
||||
@Override
|
||||
public void onBeforeConnect(HttpURLConnection conn)
|
||||
throws Exception {
|
||||
conn.setDoOutput(true);
|
||||
conn.setDoInput(true);
|
||||
conn.setUseCaches(false);
|
||||
conn.setRequestMethod("POST");
|
||||
conn.setRequestProperty("Content-Type",
|
||||
"application/x-www-form-urlencoded");
|
||||
|
||||
DataOutputStream out = new DataOutputStream(conn.getOutputStream());
|
||||
StringBuilder sb = new StringBuilder();
|
||||
int i = 0;
|
||||
for (String[] arg : mArgs) {
|
||||
if (i != 0)
|
||||
sb.append("&");
|
||||
sb.append(URLEncoder.encode(arg[0], "UTF-8"));
|
||||
sb.append("=");
|
||||
sb.append(URLEncoder.encode(arg[1], "UTF-8"));
|
||||
i++;
|
||||
}
|
||||
Log.d(TAG, sb.toString());
|
||||
out.writeBytes(sb.toString());
|
||||
out.flush();
|
||||
out.close();
|
||||
}
|
||||
@Override
|
||||
public String isNeedBody() {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
public String post(String urlStr, String str) {
|
||||
mException = null;
|
||||
/**
|
||||
* RequstHelper for post json, use POST method
|
||||
*/
|
||||
private class PostJsonHelper implements RequestHelper {
|
||||
private JSONObject mJo;
|
||||
|
||||
int redirectionCount = 0;
|
||||
URL url = null;
|
||||
HttpURLConnection conn = null;
|
||||
|
||||
Message msg = null;
|
||||
if (mListener != null)
|
||||
msg = new Message();
|
||||
|
||||
try {
|
||||
|
||||
Log.d(TAG, "Http post " + urlStr);
|
||||
|
||||
url = new URL(urlStr);
|
||||
while (redirectionCount++ < Constant.MAX_REDIRECTS) {
|
||||
conn = (HttpURLConnection) url.openConnection();
|
||||
conn.addRequestProperty("Accept-Encoding", "gzip");
|
||||
conn.setRequestProperty("User-Agent", Constant.userAgent);
|
||||
conn.setConnectTimeout(Constant.DEFAULT_TIMEOUT);
|
||||
conn.setReadTimeout(Constant.DEFAULT_TIMEOUT);
|
||||
conn.setDoOutput(true);
|
||||
conn.setDoInput(true);
|
||||
conn.setRequestMethod("POST");
|
||||
conn.setUseCaches(false);
|
||||
conn.setInstanceFollowRedirects(true);
|
||||
conn.setRequestProperty("Connection", "close");
|
||||
|
||||
DataOutputStream out = new DataOutputStream(conn.getOutputStream());
|
||||
out.writeBytes(str);
|
||||
out.flush();
|
||||
out.close();
|
||||
|
||||
conn.connect();
|
||||
|
||||
final int responseCode = conn.getResponseCode();
|
||||
switch (responseCode) {
|
||||
case HttpURLConnection.HTTP_OK:
|
||||
case HttpURLConnection.HTTP_PARTIAL:
|
||||
String pageContext = getPageContext(conn);
|
||||
if (msg != null) {
|
||||
Package p = new Package();
|
||||
p.listener = mListener;
|
||||
p.str = pageContext;
|
||||
msg.obj = p;
|
||||
msg.what = Constants.TRUE;
|
||||
mHandler.sendMessage(msg);
|
||||
}
|
||||
return pageContext;
|
||||
|
||||
case HttpURLConnection.HTTP_MOVED_PERM:
|
||||
case HttpURLConnection.HTTP_MOVED_TEMP:
|
||||
case HttpURLConnection.HTTP_SEE_OTHER:
|
||||
case Constant.HTTP_TEMP_REDIRECT:
|
||||
final String location = conn.getHeaderField("Location");
|
||||
url = new URL(url, location);
|
||||
continue;
|
||||
|
||||
default:
|
||||
throw new ResponseCodeException(responseCode);
|
||||
}
|
||||
}
|
||||
} catch (Exception e) {
|
||||
mException = e;
|
||||
e.printStackTrace();
|
||||
|
||||
if (msg != null) {
|
||||
Package p = new Package();
|
||||
p.listener = mListener;
|
||||
p.str = getEMsg();
|
||||
msg.obj = p;
|
||||
msg.what = Constants.FALSE;
|
||||
mHandler.sendMessage(msg);
|
||||
}
|
||||
return null;
|
||||
} finally {
|
||||
if (conn != null)
|
||||
conn.disconnect();
|
||||
public PostJsonHelper(JSONObject jo) {
|
||||
mJo = jo;
|
||||
}
|
||||
|
||||
mException = new RedirectionException();
|
||||
return null;
|
||||
}
|
||||
*/
|
||||
|
||||
public String postJson(String urlStr, JSONObject json) {
|
||||
mException = null;
|
||||
|
||||
int redirectionCount = 0;
|
||||
URL url = null;
|
||||
HttpURLConnection conn = null;
|
||||
|
||||
Message msg = null;
|
||||
if (mListener != null)
|
||||
msg = new Message();
|
||||
|
||||
try {
|
||||
@Override
|
||||
public void onBeforeConnect(HttpURLConnection conn) throws Exception {
|
||||
conn.setDoOutput(true);
|
||||
conn.setDoInput(true);
|
||||
conn.setUseCaches(false);
|
||||
conn.setRequestMethod("POST");
|
||||
conn.setRequestProperty("Content-Type", "application/json");
|
||||
|
||||
Log.d(TAG, "Http post " + urlStr);
|
||||
|
||||
url = new URL(urlStr);
|
||||
while (redirectionCount++ < Constant.MAX_REDIRECTS) {
|
||||
conn = (HttpURLConnection) url.openConnection();
|
||||
conn.addRequestProperty("Accept-Encoding", "gzip");
|
||||
conn.setRequestProperty("User-Agent", Constant.userAgent);
|
||||
conn.setConnectTimeout(Constant.DEFAULT_TIMEOUT);
|
||||
conn.setReadTimeout(Constant.DEFAULT_TIMEOUT);
|
||||
conn.setDoOutput(true);
|
||||
conn.setDoInput(true);
|
||||
conn.setRequestMethod("POST");
|
||||
conn.setUseCaches(false);
|
||||
conn.setInstanceFollowRedirects(true);
|
||||
conn.setRequestProperty("Content-Type", "application/json");
|
||||
conn.setRequestProperty("Accept", "application/json");
|
||||
conn.setRequestProperty("Connection", "close");
|
||||
|
||||
DataOutputStream out = new DataOutputStream(conn.getOutputStream());
|
||||
out.writeBytes(json.toString());
|
||||
out.flush();
|
||||
out.close();
|
||||
|
||||
conn.connect();
|
||||
|
||||
final int responseCode = conn.getResponseCode();
|
||||
switch (responseCode) {
|
||||
case HttpURLConnection.HTTP_OK:
|
||||
case HttpURLConnection.HTTP_PARTIAL:
|
||||
// Test sad panda
|
||||
String contentType = conn.getHeaderField("Content-Type");
|
||||
if (contentType != null && contentType.equals("image/gif"))
|
||||
throw new SadPandaException();
|
||||
|
||||
String pageContext = getPageContext(conn);
|
||||
if (msg != null) {
|
||||
Package p = new Package();
|
||||
p.listener = mListener;
|
||||
p.str = pageContext;
|
||||
msg.obj = p;
|
||||
msg.what = Constants.TRUE;
|
||||
mHandler.sendMessage(msg);
|
||||
}
|
||||
return pageContext;
|
||||
|
||||
case HttpURLConnection.HTTP_MOVED_PERM:
|
||||
case HttpURLConnection.HTTP_MOVED_TEMP:
|
||||
case HttpURLConnection.HTTP_SEE_OTHER:
|
||||
case Constant.HTTP_TEMP_REDIRECT:
|
||||
final String location = conn.getHeaderField("Location");
|
||||
url = new URL(url, location);
|
||||
continue;
|
||||
|
||||
default:
|
||||
throw new ResponseCodeException(responseCode);
|
||||
}
|
||||
}
|
||||
} catch (Exception e) {
|
||||
mException = e;
|
||||
e.printStackTrace();
|
||||
|
||||
if (msg != null) {
|
||||
Package p = new Package();
|
||||
p.listener = mListener;
|
||||
p.str = getEMsg();
|
||||
msg.obj = p;
|
||||
msg.what = Constants.FALSE;
|
||||
mHandler.sendMessage(msg);
|
||||
}
|
||||
DataOutputStream out = new DataOutputStream(conn.getOutputStream());
|
||||
out.writeBytes(mJo.toString());
|
||||
out.flush();
|
||||
out.close();
|
||||
}
|
||||
@Override
|
||||
public String isNeedBody() {
|
||||
return null;
|
||||
} finally {
|
||||
if (conn != null)
|
||||
conn.disconnect();
|
||||
}
|
||||
|
||||
mException = new RedirectionException();
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Check Sad Panda
|
||||
* @return
|
||||
*/
|
||||
public String checkSadPanda() {
|
||||
return requst(new CheckSpHelper(), EhClient.EX_HEADER);
|
||||
}
|
||||
|
||||
/**
|
||||
* Http GET method
|
||||
* @param url
|
||||
* @return
|
||||
*/
|
||||
public String get(String url) {
|
||||
return requst(new GetHelper(), url);
|
||||
}
|
||||
|
||||
/**
|
||||
* Post form data
|
||||
* @param url
|
||||
* @param args
|
||||
* @return
|
||||
*/
|
||||
public String postForm(String url, String[][] args) {
|
||||
return requst(new PostFormHelper(args), url);
|
||||
}
|
||||
|
||||
/**
|
||||
* Post json data
|
||||
* @param url
|
||||
* @param json
|
||||
* @return
|
||||
*/
|
||||
public String postJson(String url, JSONObject json) {
|
||||
return requst(new PostJsonHelper(json), url);
|
||||
}
|
||||
|
||||
public Bitmap getImage(String urlStr, String key,
|
||||
LruCache<String, Bitmap> memoryCache,
|
||||
|
||||
Reference in new issue
Block a user