You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
798 lines
31 KiB
798 lines
31 KiB
package xyz.fycz.myreader.util;
|
|
|
|
import android.graphics.Bitmap;
|
|
import android.util.Base64;
|
|
import android.util.Log;
|
|
|
|
import com.google.gson.Gson;
|
|
import okhttp3.*;
|
|
import xyz.fycz.myreader.application.MyApplication;
|
|
import xyz.fycz.myreader.application.TrustAllCerts;
|
|
import xyz.fycz.myreader.callback.HttpCallback;
|
|
import xyz.fycz.myreader.callback.JsonCallback;
|
|
import xyz.fycz.myreader.callback.URLConnectionCallback;
|
|
import xyz.fycz.myreader.common.APPCONST;
|
|
import xyz.fycz.myreader.common.URLCONST;
|
|
import xyz.fycz.myreader.entity.JsonModel;
|
|
|
|
import java.io.*;
|
|
import java.net.HttpURLConnection;
|
|
import java.net.URL;
|
|
import java.net.URLConnection;
|
|
import java.security.SecureRandom;
|
|
import java.security.cert.CertificateException;
|
|
import java.security.cert.X509Certificate;
|
|
import java.util.*;
|
|
import java.util.concurrent.TimeUnit;
|
|
|
|
import javax.net.ssl.HttpsURLConnection;
|
|
import javax.net.ssl.SSLContext;
|
|
import javax.net.ssl.SSLSocketFactory;
|
|
import javax.net.ssl.TrustManager;
|
|
import javax.net.ssl.X509TrustManager;
|
|
|
|
import static java.lang.String.valueOf;
|
|
|
|
|
|
public class HttpUtil {
|
|
|
|
private static String sessionid;
|
|
//最好只使用一个共享的OkHttpClient 实例,将所有的网络请求都通过这个实例处理。
|
|
//因为每个OkHttpClient 实例都有自己的连接池和线程池,重用这个实例能降低延时,减少内存消耗,而重复创建新实例则会浪费资源。
|
|
private static OkHttpClient mClient;
|
|
|
|
private static SSLSocketFactory createSSLSocketFactory() {
|
|
SSLSocketFactory ssfFactory = null;
|
|
|
|
try {
|
|
SSLContext sc = SSLContext.getInstance("TLS");
|
|
sc.init(null, new TrustManager[]{new TrustAllCerts()}, new SecureRandom());
|
|
ssfFactory = sc.getSocketFactory();
|
|
} catch (Exception e) {
|
|
}
|
|
|
|
return ssfFactory;
|
|
}
|
|
|
|
private static synchronized OkHttpClient getOkHttpClient() {
|
|
if (mClient == null) {
|
|
OkHttpClient.Builder builder = new OkHttpClient.Builder();
|
|
builder.connectTimeout(30, TimeUnit.SECONDS).readTimeout(30, TimeUnit.SECONDS);
|
|
builder.sslSocketFactory(createSSLSocketFactory());
|
|
builder.hostnameVerifier((hostname, session) -> true);
|
|
mClient = builder
|
|
.build();
|
|
}
|
|
return mClient;
|
|
|
|
}
|
|
|
|
|
|
/**
|
|
* 图片发送
|
|
*
|
|
* @param address
|
|
* @param callback
|
|
*/
|
|
public static void sendBitmapGetRequest(final String address, final HttpCallback callback) {
|
|
new Thread(new Runnable() {
|
|
HttpURLConnection connection = null;
|
|
|
|
@Override
|
|
public void run() {
|
|
try {
|
|
URL url = new URL(address);
|
|
connection = (HttpURLConnection) url.openConnection();
|
|
connection.setRequestMethod("GET");
|
|
connection.setRequestProperty("Content-type", "application/octet-stream");
|
|
connection.setRequestProperty("Accept-Charset", "utf-8");
|
|
connection.setRequestProperty("contentType", "utf-8");
|
|
connection.setConnectTimeout(10000);
|
|
connection.setReadTimeout(10000);
|
|
connection.setDoInput(true);
|
|
connection.setDoOutput(true);
|
|
InputStream in = connection.getInputStream();
|
|
if (connection.getResponseCode() != HttpURLConnection.HTTP_OK) {
|
|
Log.e("Http", "网络错误异常!!!!");
|
|
}
|
|
Log.d("Http", "connection success");
|
|
if (callback != null) {
|
|
callback.onFinish(in);
|
|
}
|
|
} catch (Exception e) {
|
|
Log.e("Http", e.toString());
|
|
if (callback != null) {
|
|
callback.onError(e);
|
|
}
|
|
} finally {
|
|
if (connection != null) {
|
|
connection.disconnect();
|
|
}
|
|
}
|
|
}
|
|
|
|
}).start();
|
|
}
|
|
|
|
/**
|
|
* get请求
|
|
*
|
|
* @param address
|
|
* @param callback
|
|
*/
|
|
public static void sendGetRequest(final String address, final HttpCallback callback) {
|
|
new Thread(new Runnable() {
|
|
HttpURLConnection connection = null;
|
|
|
|
@Override
|
|
public void run() {
|
|
try {
|
|
URL url = new URL(address);
|
|
connection = (HttpURLConnection) url.openConnection();
|
|
connection.setRequestMethod("GET");
|
|
connection.setRequestProperty("Content-type", "text/html");
|
|
connection.setRequestProperty("Accept-Charset", "utf-8");
|
|
connection.setRequestProperty("contentType", "utf-8");
|
|
connection.setConnectTimeout(60 * 1000);
|
|
connection.setReadTimeout(60 * 1000);
|
|
connection.setDoInput(true);
|
|
connection.setDoOutput(true);
|
|
if (connection.getResponseCode() != HttpURLConnection.HTTP_OK) {
|
|
Log.e("Http", "网络错误异常!!!!");
|
|
}
|
|
InputStream in = connection.getInputStream();
|
|
Log.d("Http", "connection success");
|
|
if (callback != null) {
|
|
callback.onFinish(in);
|
|
}
|
|
} catch (Exception e) {
|
|
e.printStackTrace();
|
|
Log.e("Http", e.toString());
|
|
if (callback != null) {
|
|
callback.onError(e);
|
|
}
|
|
} finally {
|
|
if (connection != null) {
|
|
connection.disconnect();
|
|
}
|
|
}
|
|
}
|
|
}).start();
|
|
}
|
|
|
|
/**
|
|
* 网络通信测试请求
|
|
*
|
|
* @param address
|
|
* @param callback
|
|
*/
|
|
public static void sendTestGetRequest(final String address, final HttpCallback callback) {
|
|
new Thread(new Runnable() {
|
|
HttpURLConnection connection = null;
|
|
|
|
@Override
|
|
public void run() {
|
|
try {
|
|
URL url = new URL(address);
|
|
connection = (HttpURLConnection) url.openConnection();
|
|
connection.setRequestMethod("GET");
|
|
connection.setRequestProperty("Content-type", "text/html");
|
|
connection.setRequestProperty("Accept-Charset", "utf-8");
|
|
connection.setRequestProperty("contentType", "utf-8");
|
|
connection.setConnectTimeout(3 * 1000);
|
|
connection.setReadTimeout(3 * 1000);
|
|
connection.setDoInput(true);
|
|
connection.setDoOutput(true);
|
|
if (connection.getResponseCode() != HttpURLConnection.HTTP_OK) {
|
|
Log.e("Http", "网络错误异常!!!!");
|
|
}
|
|
InputStream in = connection.getInputStream();
|
|
Log.d("Http", "connection success");
|
|
if (callback != null) {
|
|
callback.onFinish(in);
|
|
}
|
|
} catch (Exception e) {
|
|
e.printStackTrace();
|
|
Log.e("Http", e.toString());
|
|
if (callback != null) {
|
|
callback.onError(e);
|
|
}
|
|
} finally {
|
|
if (connection != null) {
|
|
connection.disconnect();
|
|
}
|
|
}
|
|
}
|
|
}).start();
|
|
}
|
|
|
|
public static void sendGetRequest_okHttp(final String address, final HttpCallback callback) {
|
|
MyApplication.getApplication().newThread(() -> {
|
|
/* HttpURLConnection connection = null;
|
|
try {
|
|
URL url = new URL(address);
|
|
connection = (HttpURLConnection) url.openConnection();
|
|
connection.setRequestMethod("GET");
|
|
connection.setRequestProperty("Content-type", "text/html");
|
|
connection.setRequestProperty("Accept-Charset", "gbk");
|
|
connection.setRequestProperty("contentType", "gbk");
|
|
connection.setConnectTimeout(5 * 1000);
|
|
connection.setReadTimeout(5 * 1000);
|
|
connection.setDoInput(true);
|
|
connection.setDoOutput(true);
|
|
if (connection.getResponseCode() != HttpURLConnection.HTTP_OK) {
|
|
Log.e("Http", "网络错误异常!!!!");
|
|
}
|
|
InputStream in = connection.getInputStream();
|
|
Log.d("Http", "connection success");
|
|
if (callback != null) {
|
|
callback.onFinish(in);
|
|
}
|
|
} catch (Exception e) {
|
|
e.printStackTrace();
|
|
Log.e("Http", e.toString());
|
|
if (callback != null) {
|
|
callback.onError(e);
|
|
}
|
|
} finally {
|
|
if (connection != null) {
|
|
connection.disconnect();
|
|
}
|
|
}*/
|
|
try {
|
|
OkHttpClient client = getOkHttpClient();
|
|
/*HashMap<String, List<Cookie>> cookieStore = new HashMap<>();
|
|
OkHttpClient client = new OkHttpClient.Builder()
|
|
.cookieJar(new CookieJar() {
|
|
@Override
|
|
public void saveFromResponse(HttpUrl httpUrl, List<Cookie> list) {
|
|
StringBuilder sb = new StringBuilder();
|
|
for (Cookie cookie : list){
|
|
sb.append(cookie.name()).append("=").append(cookie.value()).append("; ");
|
|
}
|
|
if (list.size() > 0){
|
|
sb.deleteCharAt(sb.lastIndexOf("; "));
|
|
}
|
|
Log.i("CookieStr", sb.toString());
|
|
cookieStore.put(httpUrl.host(), list);
|
|
}
|
|
|
|
@Override
|
|
public List<Cookie> loadForRequest(HttpUrl httpUrl) {
|
|
List<Cookie> cookies = cookieStore.get(httpUrl.host());
|
|
return cookies != null ? cookies : new ArrayList<>();
|
|
}
|
|
})
|
|
.build();*/
|
|
Request.Builder requestBuilder = new Request.Builder()
|
|
.addHeader("accept", "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9")
|
|
.addHeader("accept-language", "zh-CN,zh;q=0.9")
|
|
.addHeader("User-Agent", "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4168.3 Safari/537.36");
|
|
if (address.contains("qidian.com")) {
|
|
SharedPreUtils spu = SharedPreUtils.getInstance();
|
|
String cookie = spu.getString("qdCookie", "");
|
|
if (cookie.equals("")) {
|
|
requestBuilder.addHeader("cookie", "_csrfToken=eXRDlZxmRDLvFAmdgzqvwWAASrxxp2WkVlH4ZM7e; newstatisticUUID=1595991935_2026387981");
|
|
}else {
|
|
requestBuilder.addHeader("cookie", cookie);
|
|
}
|
|
}
|
|
requestBuilder.url(address);
|
|
Response response = client.newCall(requestBuilder.build()).execute();
|
|
callback.onFinish(response.body().byteStream());
|
|
} catch (Exception e) {
|
|
e.printStackTrace();
|
|
callback.onError(e);
|
|
}
|
|
});
|
|
}
|
|
|
|
/**
|
|
* post请求
|
|
*
|
|
* @param address
|
|
* @param output
|
|
* @param callback
|
|
*/
|
|
public static void sendPostRequest(final String address, final String output, final HttpCallback callback) {
|
|
MyApplication.getApplication().newThread(new Runnable() {
|
|
HttpURLConnection connection = null;
|
|
|
|
@Override
|
|
public void run() {
|
|
try {
|
|
URL url = new URL(address);
|
|
connection = (HttpURLConnection) url.openConnection();
|
|
connection.setRequestMethod("POST");
|
|
connection.setConnectTimeout(60 * 1000);
|
|
connection.setReadTimeout(60 * 1000);
|
|
connection.setRequestProperty("user-agent",
|
|
"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4168.3 Safari/537.36");
|
|
connection.setDoInput(true);
|
|
connection.setDoOutput(true);
|
|
if (output != null) {
|
|
// 获取URLConnection对象对应的输出流
|
|
PrintWriter out = new PrintWriter(connection.getOutputStream());
|
|
// 发送请求参数
|
|
out.print(output);
|
|
// flush输出流的缓冲
|
|
out.flush();
|
|
}
|
|
InputStream in = connection.getInputStream();
|
|
if (callback != null) {
|
|
callback.onFinish(in);
|
|
}
|
|
} catch (Exception e) {
|
|
if (callback != null) {
|
|
callback.onError(e);
|
|
}
|
|
} finally {
|
|
if (connection != null) {
|
|
connection.disconnect();
|
|
}
|
|
}
|
|
}
|
|
});
|
|
}
|
|
|
|
/**
|
|
* post请求 获取蓝奏云直链
|
|
*
|
|
* @param address
|
|
* @param output
|
|
* @param callback
|
|
*/
|
|
public static void sendPostRequest(final String address, final String output, final HttpCallback callback, final String referer) {
|
|
new Thread(new Runnable() {
|
|
HttpURLConnection connection = null;
|
|
|
|
@Override
|
|
public void run() {
|
|
try {
|
|
URL url = new URL(address);
|
|
connection = (HttpURLConnection) url.openConnection();
|
|
connection.setRequestMethod("POST");
|
|
connection.setConnectTimeout(60 * 1000);
|
|
connection.setReadTimeout(60 * 1000);
|
|
connection.setRequestProperty("Referer", referer);
|
|
connection.setRequestProperty("user-agent",
|
|
"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4168.3 Safari/537.36");
|
|
connection.setDoInput(true);
|
|
connection.setDoOutput(true);
|
|
if (output != null) {
|
|
DataOutputStream out = new DataOutputStream(connection.getOutputStream());
|
|
out.writeBytes(output);
|
|
}
|
|
InputStream in = connection.getInputStream();
|
|
if (callback != null) {
|
|
callback.onFinish(in);
|
|
}
|
|
} catch (Exception e) {
|
|
if (callback != null) {
|
|
callback.onError(e);
|
|
}
|
|
} finally {
|
|
if (connection != null) {
|
|
connection.disconnect();
|
|
}
|
|
}
|
|
}
|
|
}).start();
|
|
}
|
|
|
|
public static void sendPostRequest_okHttp(final String address, final String output, final HttpCallback callback) {
|
|
new Thread(new Runnable() {
|
|
HttpURLConnection connection = null;
|
|
|
|
@Override
|
|
public void run() {
|
|
try {
|
|
MediaType contentType = MediaType.parse("charset=utf-8");
|
|
OkHttpClient client = new OkHttpClient();
|
|
RequestBody body = RequestBody.create(contentType, output);
|
|
Request request = new Request.Builder()
|
|
.url(address)
|
|
.post(body)
|
|
.build();
|
|
Response response = client.newCall(request).execute();
|
|
callback.onFinish(response.body().byteStream());
|
|
} catch (Exception e) {
|
|
if (callback != null) {
|
|
callback.onError(e);
|
|
}
|
|
} finally {
|
|
if (connection != null) {
|
|
connection.disconnect();
|
|
}
|
|
}
|
|
}
|
|
}).start();
|
|
}
|
|
|
|
/**
|
|
* 多文件上传请求
|
|
*
|
|
* @param url
|
|
* @param files
|
|
* @param params
|
|
* @param callback
|
|
*/
|
|
public static void uploadFile(String url, ArrayList<File> files, Map<String, Object> params, final HttpCallback callback) {
|
|
OkHttpClient client = new OkHttpClient();
|
|
// form 表单形式上传
|
|
MultipartBody.Builder requestBody = new MultipartBody.Builder().setType(MultipartBody.FORM);
|
|
for (File file : files) {
|
|
if (file != null) {
|
|
// MediaType.parse() 里面是上传的文件类型。
|
|
RequestBody body = RequestBody.create(MediaType.parse("*/*"), file);
|
|
String filename = file.getName();
|
|
// 参数分别为, 请求key ,文件名称 , RequestBody
|
|
requestBody.addFormDataPart(file.getName(), file.getName(), body);
|
|
}
|
|
}
|
|
|
|
if (params != null) {
|
|
// map 里面是请求中所需要的 key 和 value
|
|
for (Map.Entry entry : params.entrySet()) {
|
|
requestBody.addFormDataPart(valueOf(entry.getKey()), valueOf(entry.getValue()));
|
|
}
|
|
}
|
|
Request request = new Request.Builder().url(url).post(requestBody.build()).tag(MyApplication.getApplication()).build();
|
|
// readTimeout("请求超时时间" , 时间单位);
|
|
client.newBuilder().readTimeout(5000, TimeUnit.MILLISECONDS).build().newCall(request).enqueue(new Callback() {
|
|
@Override
|
|
public void onFailure(Call call, IOException e) {
|
|
callback.onError(e);
|
|
Log.i("Http", "onFailure");
|
|
}
|
|
|
|
@Override
|
|
public void onResponse(Call call, Response response) throws IOException {
|
|
if (response.isSuccessful()) {
|
|
String str = response.body().string();
|
|
callback.onFinish(str);
|
|
Log.i("Http", response.message() + " , body " + str);
|
|
} else {
|
|
JsonModel jsonModel = new JsonModel();
|
|
jsonModel.setSuccess(false);
|
|
// jsonModel.setResult(response.body().string());
|
|
callback.onFinish(new Gson().toJson(jsonModel));
|
|
Log.i("Http", response.message() + " error : body " + response.body().string());
|
|
}
|
|
}
|
|
|
|
});
|
|
|
|
}
|
|
|
|
|
|
/**
|
|
* 生成URL
|
|
*
|
|
* @param p_url
|
|
* @param params
|
|
* @return
|
|
*/
|
|
public static String makeURL(String p_url, Map<String, Object> params) {
|
|
if (params == null) return p_url;
|
|
StringBuilder url = new StringBuilder(p_url);
|
|
Log.d("http", p_url);
|
|
if (url.indexOf("?") < 0)
|
|
url.append('?');
|
|
for (String name : params.keySet()) {
|
|
Log.d("http", name + "=" + params.get(name));
|
|
url.append('&');
|
|
url.append(name);
|
|
url.append('=');
|
|
try {
|
|
if (URLCONST.isRSA) {
|
|
if (name.equals("token")) {
|
|
url.append(valueOf(params.get(name)));
|
|
} else {
|
|
url.append(StringHelper.encode(Base64.encodeToString(RSAUtilV2.encryptByPublicKey(valueOf(params.get(name)).getBytes(), APPCONST.publicKey), Base64.DEFAULT).replace("\n", "")));
|
|
}
|
|
} else {
|
|
url.append(valueOf(params.get(name)));
|
|
}
|
|
} catch (Exception e) {
|
|
e.printStackTrace();
|
|
}
|
|
//不做URLEncoder处理
|
|
// try {
|
|
// url.append(URLEncoder.encode(String.valueOf(params.get(name)), UTF_8));
|
|
// } catch (UnsupportedEncodingException e) {
|
|
// // TODO Auto-generated catch block
|
|
// e.printStackTrace();
|
|
// }
|
|
}
|
|
return url.toString().replace("?&", "?");
|
|
}
|
|
|
|
/**
|
|
* 生成URL(不加密)
|
|
*
|
|
* @param p_url
|
|
* @param params
|
|
* @return
|
|
*/
|
|
public static String makeURLNoRSA(String p_url, Map<String, Object> params) {
|
|
if (params == null) return "";
|
|
StringBuilder url = new StringBuilder(p_url);
|
|
Log.d("http", p_url);
|
|
if (url.indexOf("?") < 0)
|
|
url.append('?');
|
|
for (String name : params.keySet()) {
|
|
Log.d("http", name + "=" + params.get(name));
|
|
url.append('&');
|
|
url.append(name);
|
|
url.append('=');
|
|
url.append(valueOf(params.get(name)));
|
|
//不做URLEncoder处理
|
|
// try {
|
|
// url.append(URLEncoder.encode(String.valueOf(params.get(name)), UTF_8));
|
|
// } catch (UnsupportedEncodingException e) {
|
|
// // TODO Auto-generated catch block
|
|
// e.printStackTrace();
|
|
// }
|
|
}
|
|
return url.toString().replace("?&", "?");
|
|
}
|
|
|
|
/**
|
|
* 生成post输出参数串
|
|
*
|
|
* @param params
|
|
* @return
|
|
*/
|
|
public static String makePostOutput(Map<String, Object> params) {
|
|
StringBuilder output = new StringBuilder();
|
|
Iterator<String> it = params.keySet().iterator();
|
|
while (true) {
|
|
String name = it.next();
|
|
Log.d("http", name + "=" + params.get(name));
|
|
output.append(name);
|
|
output.append('=');
|
|
try {
|
|
if (URLCONST.isRSA) {
|
|
if (name.equals("token")) {
|
|
output.append(valueOf(params.get(name)));
|
|
} else {
|
|
output.append(StringHelper.encode(Base64.encodeToString(RSAUtilV2.encryptByPublicKey(valueOf(params.get(name)).getBytes(), APPCONST.publicKey), Base64.DEFAULT).replace("\n", "")));
|
|
}
|
|
} else {
|
|
output.append(valueOf(params.get(name)));
|
|
}
|
|
} catch (Exception e) {
|
|
e.printStackTrace();
|
|
}
|
|
if (!it.hasNext()) {
|
|
break;
|
|
}
|
|
output.append('&');
|
|
//不做URLEncoder处理
|
|
// try {
|
|
// url.append(URLEncoder.encode(String.valueOf(params.get(name)), UTF_8));
|
|
// } catch (UnsupportedEncodingException e) {
|
|
// // TODO Auto-generated catch block
|
|
// e.printStackTrace();
|
|
// }
|
|
}
|
|
return output.toString();
|
|
}
|
|
|
|
public static void uploadFileRequest(final String actionUrl,
|
|
final String[] filePaths,
|
|
final Map<String, Object> params,
|
|
final JsonCallback callback) {
|
|
|
|
new Thread(new Runnable() {
|
|
@Override
|
|
public void run() {
|
|
uploadFile(actionUrl, params, filePaths, callback);
|
|
}
|
|
|
|
}).start();
|
|
|
|
}
|
|
|
|
|
|
/**
|
|
* 测试URL可连接性
|
|
*
|
|
* @param url
|
|
* @param connectionCallback
|
|
*/
|
|
public static void isURLConnection(String url, final URLConnectionCallback connectionCallback) {
|
|
sendTestGetRequest(url, new HttpCallback() {
|
|
@Override
|
|
public void onFinish(String response) {
|
|
connectionCallback.onFinish(true);
|
|
}
|
|
|
|
@Override
|
|
public void onFinish(InputStream in) {
|
|
connectionCallback.onFinish(true);
|
|
}
|
|
|
|
@Override
|
|
public void onFinish(Bitmap bm) {
|
|
connectionCallback.onFinish(true);
|
|
}
|
|
|
|
@Override
|
|
public void onError(Exception e) {
|
|
connectionCallback.onFinish(false);
|
|
|
|
}
|
|
});
|
|
}
|
|
|
|
|
|
/**
|
|
* 多文件上传的方法
|
|
*
|
|
* @param actionUrl:上传的路径
|
|
* @param uploadFilePaths:需要上传的文件路径,数组
|
|
* @return
|
|
*/
|
|
private static void uploadFile(String actionUrl, Map<String, Object> params, String[] uploadFilePaths, JsonCallback callback) {
|
|
String end = "\r\n";
|
|
String twoHyphens = "--";
|
|
String boundary = "*****";
|
|
String CHARSET = "utf-8"; //设置编码
|
|
DataOutputStream ds = null;
|
|
InputStream inputStream = null;
|
|
InputStreamReader inputStreamReader = null;
|
|
BufferedReader reader = null;
|
|
StringBuffer resultBuffer = new StringBuffer();
|
|
String tempLine = null;
|
|
try {
|
|
Log.i("http", "开始上传文件");
|
|
// 统一资源
|
|
URL url = new URL(makeURL(actionUrl, params));
|
|
// 连接类的父类,抽象类
|
|
URLConnection urlConnection = url.openConnection();
|
|
urlConnection.setConnectTimeout(60000);
|
|
urlConnection.setReadTimeout(60000);
|
|
// http的连接类
|
|
HttpURLConnection httpURLConnection = (HttpURLConnection) urlConnection;
|
|
// 设置是否从httpUrlConnection读入,默认情况下是true;
|
|
httpURLConnection.setDoInput(true);
|
|
// 设置是否向httpUrlConnection输出
|
|
httpURLConnection.setDoOutput(true);
|
|
// Post 请求不能使用缓存
|
|
httpURLConnection.setUseCaches(false);
|
|
// 设定请求的方法,默认是GET
|
|
httpURLConnection.setRequestMethod("POST");
|
|
// 设置字符编码连接参数
|
|
httpURLConnection.setRequestProperty("Connection", "Keep-Alive");
|
|
// 设置字符编码
|
|
httpURLConnection.setRequestProperty("Charset", "UTF-8");
|
|
// 设置请求内容类型
|
|
httpURLConnection.setRequestProperty("Content-Type", "multipart/form-data;boundary=" + boundary);
|
|
// 设置DataOutputStream
|
|
ds = new DataOutputStream(httpURLConnection.getOutputStream());
|
|
for (int i = 0; i < uploadFilePaths.length; i++) {
|
|
String uploadFile = uploadFilePaths[i];
|
|
String filename = uploadFile.substring(uploadFile.lastIndexOf("/") + 1);
|
|
//设置参数
|
|
StringBuffer sb = new StringBuffer();
|
|
sb.append(end);
|
|
sb.append(twoHyphens + boundary + end);
|
|
sb.append("Content-Disposition: form-data; " + "name=\"file" + i + "\";filename=\"" + filename + "\"" + end);
|
|
sb.append("Content-Type: application/octet-stream; charset=" + CHARSET + end);
|
|
sb.append(end);
|
|
Log.i("http", "参数:" + sb.toString());
|
|
//写入文件数据
|
|
ds.write(sb.toString().getBytes());
|
|
FileInputStream fStream = new FileInputStream(uploadFile);
|
|
int bufferSize = 1024;
|
|
byte[] buffer = new byte[bufferSize];
|
|
int length = -1;
|
|
int total = 0;
|
|
while ((length = fStream.read(buffer)) != -1) {
|
|
ds.write(buffer, 0, length);
|
|
total += length;
|
|
}
|
|
Log.i("http", "文件的大小:" + total);
|
|
ds.writeBytes(end);
|
|
/* close streams */
|
|
fStream.close();
|
|
}
|
|
ds.writeBytes(twoHyphens + boundary + twoHyphens + end);
|
|
/* close streams */
|
|
ds.flush();
|
|
if (httpURLConnection.getResponseCode() >= 300) {
|
|
callback.onError(new Exception(
|
|
"HTTP Request is not success, Response code is " + httpURLConnection.getResponseCode()));
|
|
// throw new Exception(
|
|
// "HTTP Request is not success, Response code is " + httpURLConnection.getResponseCode());
|
|
}
|
|
if (httpURLConnection.getResponseCode() == HttpURLConnection.HTTP_OK) {
|
|
inputStream = httpURLConnection.getInputStream();
|
|
inputStreamReader = new InputStreamReader(inputStream);
|
|
reader = new BufferedReader(inputStreamReader);
|
|
tempLine = null;
|
|
resultBuffer = new StringBuffer();
|
|
while ((tempLine = reader.readLine()) != null) {
|
|
resultBuffer.append(tempLine);
|
|
resultBuffer.append("\n");
|
|
}
|
|
Log.i("http", resultBuffer.toString());
|
|
if (callback != null) {
|
|
Gson gson = new Gson();
|
|
JsonModel jsonModel = gson.fromJson(resultBuffer.toString(), JsonModel.class);
|
|
if (URLCONST.isRSA && !StringHelper.isEmpty(jsonModel.getResult())) {
|
|
jsonModel.setResult(StringHelper.decode(new String(RSAUtilV2.decryptByPrivateKey(Base64.decode(jsonModel.getResult().replace("\n", ""), Base64.DEFAULT), APPCONST.privateKey))));
|
|
}
|
|
callback.onFinish(jsonModel);
|
|
}
|
|
}
|
|
} catch (Exception e) {
|
|
e.printStackTrace();
|
|
} finally {
|
|
if (ds != null) {
|
|
try {
|
|
ds.close();
|
|
} catch (IOException e) {
|
|
e.printStackTrace();
|
|
}
|
|
}
|
|
if (reader != null) {
|
|
try {
|
|
reader.close();
|
|
} catch (IOException e) {
|
|
e.printStackTrace();
|
|
}
|
|
}
|
|
if (inputStreamReader != null) {
|
|
try {
|
|
inputStreamReader.close();
|
|
} catch (IOException e) {
|
|
e.printStackTrace();
|
|
}
|
|
}
|
|
if (inputStream != null) {
|
|
try {
|
|
inputStream.close();
|
|
} catch (IOException e) {
|
|
e.printStackTrace();
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
/**
|
|
* Trust every server - dont check for any certificate
|
|
*/
|
|
public static void trustAllHosts() {
|
|
final String TAG = "trustAllHosts";
|
|
// Create a trust manager that does not validate certificate chains
|
|
TrustManager[] trustAllCerts = new TrustManager[]{new X509TrustManager() {
|
|
|
|
public java.security.cert.X509Certificate[] getAcceptedIssuers() {
|
|
return new java.security.cert.X509Certificate[]{};
|
|
}
|
|
|
|
public void checkClientTrusted(X509Certificate[] chain, String authType) throws CertificateException {
|
|
Log.i(TAG, "checkClientTrusted");
|
|
}
|
|
|
|
public void checkServerTrusted(X509Certificate[] chain, String authType) throws CertificateException {
|
|
Log.i(TAG, "checkServerTrusted");
|
|
}
|
|
}};
|
|
|
|
// Install the all-trusting trust manager
|
|
try {
|
|
SSLContext sc = SSLContext.getInstance("TLS");
|
|
sc.init(null, trustAllCerts, new java.security.SecureRandom());
|
|
HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());
|
|
} catch (Exception e) {
|
|
e.printStackTrace();
|
|
}
|
|
}
|
|
|
|
|
|
}
|
|
|