|
@@ -15,8 +15,11 @@ import com.alibaba.sdk.android.oss.common.auth.OSSCustomSignerCredentialProvider
|
|
|
import com.alibaba.sdk.android.oss.common.utils.OSSUtils;
|
|
|
import com.alibaba.sdk.android.oss.model.PutObjectRequest;
|
|
|
import com.alibaba.sdk.android.oss.model.PutObjectResult;
|
|
|
+import com.taiyi.tyusbsdk.pulse.TaiyiConfig;
|
|
|
|
|
|
-import io.reactivex.annotations.Nullable;
|
|
|
+import java.util.Objects;
|
|
|
+
|
|
|
+import okhttp3.Headers;
|
|
|
import okhttp3.HttpUrl;
|
|
|
import okhttp3.OkHttpClient;
|
|
|
import okhttp3.Request;
|
|
@@ -44,7 +47,8 @@ public class OssFileUtil {
|
|
|
config.setMaxErrorRetry(2); // 失败后最大重试次数,默认2次。
|
|
|
}
|
|
|
|
|
|
- public static void setProxy(@Nullable String proxy) {
|
|
|
+ public static void setProxy(TaiyiConfig.OSSAgency agency) {
|
|
|
+ String proxy = agency.getUrl();
|
|
|
if (proxy == null || proxy.isEmpty()) return;
|
|
|
android.util.Log.i("log:proxy", "[oss] 设置代理: " + proxy + " ("+ target + ")");
|
|
|
|
|
@@ -54,14 +58,36 @@ public class OssFileUtil {
|
|
|
String requestUrl = originalRequest.url().toString();
|
|
|
if (requestUrl.startsWith(prefix)) {
|
|
|
String proxyUrl = requestUrl.replaceFirst(prefix, proxy);
|
|
|
- android.util.Log.d("log:proxy", "[oss] OkHttp URL: " + proxyUrl + " (" + prefix + ")");
|
|
|
- Request.Builder proxyRequest = originalRequest.newBuilder().url(proxyUrl);
|
|
|
+ String proxyMethod = agency.getMethod();
|
|
|
+
|
|
|
+ HttpUrl.Builder urlBuilder = Objects.requireNonNull(HttpUrl.parse(proxyUrl)).newBuilder();
|
|
|
+ Request.Builder requestBuilder = originalRequest.newBuilder();
|
|
|
+
|
|
|
+ // 请求方法
|
|
|
+ if (proxyMethod != null && !proxyMethod.trim().isEmpty()) requestBuilder.method(proxyMethod, originalRequest.body());
|
|
|
+
|
|
|
+ // 请求头 -> 查询参数
|
|
|
+ if (agency.isHeader2Query()) {
|
|
|
+ // 1. 获取原有 headers
|
|
|
+ Headers headers = originalRequest.headers();
|
|
|
+
|
|
|
+ // 2. 遍历 headers,添加到 url 查询参数
|
|
|
+ for (int i = 0; i < headers.size(); i++) urlBuilder.addQueryParameter(headers.name(i), headers.value(i));
|
|
|
+
|
|
|
+ // 3. 清空 headers
|
|
|
+ requestBuilder.headers(new Headers.Builder().build());
|
|
|
+ }
|
|
|
+
|
|
|
+ HttpUrl url = urlBuilder.build();
|
|
|
+ requestBuilder.url(url);
|
|
|
|
|
|
// 同步修改 Host 头
|
|
|
- HttpUrl url = HttpUrl.parse(proxy);
|
|
|
- if (url != null && url.host() != null) proxyRequest.header("host", url.host());
|
|
|
+ if (url.host() != null) requestBuilder.header("host", url.host());
|
|
|
+
|
|
|
+ Request proxyRequest = requestBuilder.build();
|
|
|
+ android.util.Log.d("log:proxy", "[oss] OkHttp URL: [" + proxyRequest.method() + "]" + proxyRequest.url() + " (" + prefix + ")");
|
|
|
|
|
|
- return chain.proceed(proxyRequest.build());
|
|
|
+ return chain.proceed(proxyRequest);
|
|
|
} else {
|
|
|
android.util.Log.d("log:proxy", "[oss] OkHttp URL: " + requestUrl);
|
|
|
return chain.proceed(originalRequest);
|