Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ buildscript {
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:2.1.0'
classpath 'com.android.tools.build:gradle:2.1.2'

// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
Expand Down
Binary file modified gradle/wrapper/gradle-wrapper.jar
Binary file not shown.
Original file line number Diff line number Diff line change
@@ -1,13 +1,18 @@
package com.litesuits.http.impl.huc;

import android.util.Log;

import com.litesuits.http.HttpClient;
import com.litesuits.http.HttpConfig;
import com.litesuits.http.data.Charsets;
import com.litesuits.http.data.Consts;
import com.litesuits.http.data.HttpStatus;
import com.litesuits.http.data.NameValuePair;
import com.litesuits.http.exception.*;
import com.litesuits.http.exception.HttpClientException;
import com.litesuits.http.exception.HttpNetException;
import com.litesuits.http.exception.HttpServerException;
import com.litesuits.http.exception.NetException;
import com.litesuits.http.exception.ServerException;
import com.litesuits.http.listener.StatisticsListener;
import com.litesuits.http.log.HttpLog;
import com.litesuits.http.parser.DataParser;
Expand All @@ -16,19 +21,30 @@
import com.litesuits.http.request.param.HttpMethods;
import com.litesuits.http.response.InternalResponse;

import javax.net.ssl.*;
import java.io.IOException;
import java.io.InputStream;
import java.io.InterruptedIOException;
import java.io.OutputStream;
import java.net.*;
import java.net.HttpURLConnection;
import java.net.SocketTimeoutException;
import java.net.URI;
import java.net.URISyntaxException;
import java.net.URL;
import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Set;

import javax.net.ssl.HostnameVerifier;
import javax.net.ssl.HttpsURLConnection;
import javax.net.ssl.SSLContext;
import javax.net.ssl.SSLSession;
import javax.net.ssl.SSLSocketFactory;
import javax.net.ssl.TrustManager;
import javax.net.ssl.X509TrustManager;

/**
* @author 氢一 @http://def.so
* @date 2016-04-03
Expand Down Expand Up @@ -69,6 +85,7 @@ public <T> void connect(AbstractRequest<T> request, InternalResponse response)
StatisticsListener statistic = response.getStatistics();
try {
// 0. build URL
//Todo 这里增加post的情况就把param放到消息体里
URL url = new URL(request.createFullUri());

// 1. open connection and set SSL factory and hostname verifier.
Expand Down Expand Up @@ -254,6 +271,9 @@ private void writeDataIfNecessary(HttpURLConnection connection, AbstractRequest<
HttpMethods method = request.getMethod();
if (method == HttpMethods.Post || method == HttpMethods.Put || method == HttpMethods.Patch) {
HttpBody body = request.getHttpBody();
if(body==null){
body=request.createHttpBody();
}
if (body != null) {
connection.setDoOutput(true);
connection.setRequestProperty(Consts.CONTENT_TYPE, body.getContentType());
Expand All @@ -270,8 +290,8 @@ public static void trustAllCertificate() {
// Create a trust manager that does not validate certificate chains
// Android use X509 cert
TrustManager[] trustAllCerts = new TrustManager[]{new X509TrustManager() {
public java.security.cert.X509Certificate[] getAcceptedIssuers() {
return new java.security.cert.X509Certificate[]{};
public X509Certificate[] getAcceptedIssuers() {
return new X509Certificate[]{};
}

public void checkClientTrusted(X509Certificate[] chain,
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,18 @@
package com.litesuits.http.request;

import android.net.Uri;
import com.litesuits.http.annotation.*;

import com.litesuits.http.annotation.HttpBaseUrl;
import com.litesuits.http.annotation.HttpCacheExpire;
import com.litesuits.http.annotation.HttpCacheKey;
import com.litesuits.http.annotation.HttpCacheMode;
import com.litesuits.http.annotation.HttpCharSet;
import com.litesuits.http.annotation.HttpID;
import com.litesuits.http.annotation.HttpMaxRedirect;
import com.litesuits.http.annotation.HttpMaxRetry;
import com.litesuits.http.annotation.HttpMethod;
import com.litesuits.http.annotation.HttpTag;
import com.litesuits.http.annotation.HttpUri;
import com.litesuits.http.data.Consts;
import com.litesuits.http.data.NameValuePair;
import com.litesuits.http.exception.ClientException;
Expand All @@ -14,7 +25,11 @@
import com.litesuits.http.request.content.StringBody;
import com.litesuits.http.request.content.UrlEncodedFormBody;
import com.litesuits.http.request.content.multi.MultipartBody;
import com.litesuits.http.request.param.*;
import com.litesuits.http.request.param.CacheMode;
import com.litesuits.http.request.param.HttpMethods;
import com.litesuits.http.request.param.HttpParamModel;
import com.litesuits.http.request.param.HttpReplace;
import com.litesuits.http.request.param.HttpRichParamModel;
import com.litesuits.http.request.query.JsonQueryBuilder;
import com.litesuits.http.request.query.ModelQueryBuilder;
import com.litesuits.http.utils.HexUtil;
Expand Down Expand Up @@ -517,7 +532,10 @@ public LinkedHashMap<String, String> getBasicParams()
if (paramModel instanceof HttpRichParamModel && !((HttpRichParamModel) paramModel).isFieldsAttachToUrl()) {
return map;
}
map.putAll(getQueryBuilder().buildPrimaryMap(paramModel));
//Todo 如果是post就放到消息体里
if(method== HttpMethods.Get){
map.putAll(getQueryBuilder().buildPrimaryMap(paramModel));
}
}
return map;
}
Expand Down Expand Up @@ -560,7 +578,20 @@ public void cancel() {
this.cancel.set(true);
}


//TODO 对post特殊处理
public HttpBody createHttpBody() {
if(httpBody!=null){
return httpBody;
}
try {
if(getQueryBuilder()!=null){
return getQueryBuilder().buildHttpbody(paramModel);
}
} catch (Exception e) {
e.printStackTrace();
}
return httpBody;
}
public String createFullUri() throws HttpClientException {
if (uri == null || !uri.startsWith(Consts.SCHEME_HTTP)) {
if (baseUrl == null) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,18 @@
import com.litesuits.http.data.Charsets;
import com.litesuits.http.data.Consts;
import com.litesuits.http.data.NameValuePair;
import com.litesuits.http.request.param.*;
import com.litesuits.http.log.HttpLog;
import com.litesuits.http.request.content.multi.FilePart;
import com.litesuits.http.request.content.multi.MultipartBody;
import com.litesuits.http.request.content.multi.StringPart;
import com.litesuits.http.request.param.HttpCustomParam;
import com.litesuits.http.request.param.HttpCustomParam.CustomValueBuilder;
import com.litesuits.http.request.param.HttpParam;
import com.litesuits.http.request.param.HttpParamModel;
import com.litesuits.http.request.param.HttpRichParamModel;
import com.litesuits.http.request.param.NonHttpParam;

import java.io.File;
import java.io.UnsupportedEncodingException;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
Expand Down Expand Up @@ -87,7 +96,68 @@ public LinkedHashMap<String, String> buildPrimaryMap(HttpParamModel model) throw
}
return map;
}

public MultipartBody buildHttpbody(HttpParamModel model) throws IllegalArgumentException,
IllegalAccessException, InvocationTargetException, UnsupportedEncodingException {
if (model == null) { return null; }
// find all field.
ArrayList<Field> fieldList = getAllDeclaredFields(model.getClass());
// LinkedHashMap<String, String> map = new LinkedHashMap<String, String>(fieldList.size());
// put all field and its value into map
MultipartBody body = new MultipartBody();
StringBuffer stringBuffer=new StringBuffer();
for (int i = 0, size = fieldList.size(); i < size; i++) {
Field f = fieldList.get(i);
f.setAccessible(true);
HttpParam keyAnno = f.getAnnotation(HttpParam.class);
String key = keyAnno != null ? keyAnno.value() : f.getName();
Object value = f.get(model);
if (value != null) {
stringBuffer.append(key).append("=");
// value is primitive
if (isPrimitive(value)) {
body.addPart(new StringPart(key, value.toString()));
stringBuffer.append(value.toString()).append("&");
} else if (value instanceof HttpCustomParam) {
Method methods[] = HttpCustomParam.class.getDeclaredMethods();
for (Method m : methods) {
// invoke the method which has specified Annotation
if (m.getAnnotation(CustomValueBuilder.class) != null) {
m.setAccessible(true);
Object v = m.invoke(value);
if (v != null&&v instanceof File) {
// map.put(key, v.toString());
// body.addPart(new StringPart("key1", "hello"));
// body.addPart(new StringPart("key2", "很高兴见到你", "utf-8", null));
// body.addPart(new BytesPart("key3", new byte[]{1, 2, 3}));
// body.addPart(new FilePart("pic", new File("/sdcard/aaa.jpg"), "image/jpeg"));
//Todo 这里应该可以配置mimetype
File file= (File) v;
body.addPart(new FilePart(key, file));
stringBuffer.append(file.getAbsolutePath()).append("&");
// body.addPart(new InputStreamPart("litehttp", fis, "user.txt", "text/plain"));
// postRequest.setHttpBody(body);
}
break;
}
}
}
//Todo 这里先写死了
else if (value instanceof File) {
File file= (File) value;
body.addPart(new FilePart(key, file));
stringBuffer.append(file.getAbsolutePath()).append("&");
}else {
CharSequence cs = buildSencondaryValue(value);
if (cs != null) {
body.addPart(new StringPart(key, cs.toString()));
stringBuffer.append(cs.toString()).append("&");
}
}
}
}
HttpLog.d("LiteHttp post",stringBuffer.toString());
return body;
}
protected abstract CharSequence buildSencondaryValue(Object model);

/********************* utils method **************************/
Expand Down