소스 검색

OSS 支持 agency 配置:url,方法,请求头转换查询参数

cc12458 2 주 전
부모
커밋
595d5d4cda

+ 33 - 7
TYUsbSDK/src/main/java/com/taiyi/tyusbsdk/OssFileUtil.java

@@ -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);

+ 7 - 3
TYUsbSDK/src/main/java/com/taiyi/tyusbsdk/pulse/ProxyManager.java

@@ -37,12 +37,16 @@ public class ProxyManager {
 
   public Map<String, String> pool = new HashMap<>();
 
-  public void init(Map<String, String> pool) {
+  public void init(Map<String, String> pool, TaiyiConfig.OSSAgency agencyOfOSS) {
     this.pool = pool;
     this.client = new OkHttpClient();
 
-    Map.Entry<String, String> oss = findEntry(entry -> entry.getKey().startsWith(OssFileUtil.target));
-    if (oss != null) OssFileUtil.setProxy(oss.getValue());
+    if (agencyOfOSS.getUrl() == null || agencyOfOSS.getUrl().trim().isEmpty()) {
+      Map.Entry<String, String> oss = findEntry(entry -> entry.getKey().startsWith(OssFileUtil.target));
+      if (oss != null) agencyOfOSS.setUrl(oss.getValue());
+    }
+    OssFileUtil.setProxy(agencyOfOSS);
+
 
     Map.Entry<String, String> api = findEntry(entry -> entry.getKey().startsWith(HttpUtil.getBaseUrl()));
     if (api != null) HttpUtil.setBaseUrl(api.getValue());

+ 37 - 2
TYUsbSDK/src/main/java/com/taiyi/tyusbsdk/pulse/TaiyiConfig.java

@@ -3,9 +3,10 @@ package com.taiyi.tyusbsdk.pulse;
 import android.content.Context;
 import android.content.res.Resources;
 
+import androidx.annotation.Nullable;
+
 import com.taiyi.tyusbsdk.R;
 
-import java.util.HashMap;
 import java.util.Map;
 
 public class TaiyiConfig {
@@ -14,6 +15,39 @@ public class TaiyiConfig {
   public boolean skipReport = false;
   public int delayDisconnect = 0;
   public Map<String, String> proxy;
+  public OSSAgency agencyOfOSS = new OSSAgency(null, null, false);
+
+  public static class OSSAgency {
+    @Nullable
+    private final String method;
+    @Nullable
+    private String url;
+    private final boolean header2Query;
+
+    public OSSAgency(@Nullable String url, @Nullable String method, boolean header2Query) {
+      this.url = url;
+      this.method = method;
+      this.header2Query = header2Query;
+    }
+
+    @Nullable
+    public String getUrl() {
+      return url;
+    }
+
+    public void setUrl(@Nullable String value) {
+      url = value;
+    }
+
+    @Nullable
+    public String getMethod() {
+      return method;
+    }
+
+    public boolean isHeader2Query() {
+      return header2Query;
+    }
+  }
 
   public static TaiyiConfig getDefault(Context context) {
     return new TaiyiConfig(context);
@@ -37,4 +71,5 @@ public class TaiyiConfig {
   public String getAppSecret() {
     return appSecret;
   }
-}
+}
+

+ 1 - 1
TYUsbSDK/src/main/java/com/taiyi/tyusbsdk/pulse/TaiyiManager.java

@@ -151,7 +151,7 @@ public class TaiyiManager {
         this.appId = _config.getAppId();
         this.appSecret = _config.getAppSecret();
 
-        ProxyManager.getInstance().init(_config.proxy);
+        ProxyManager.getInstance().init(_config.proxy, _config.agencyOfOSS);
     }
 
     public void toGoMeasure(boolean isLeft) {

+ 1 - 1
ble/gradle.properties

@@ -1,3 +1,3 @@
 MAVEN_LIB_ARTIFACTID=ble
-MAVEN_LIB_VERSION=1.1.0-alpha.03
+MAVEN_LIB_VERSION=1.1.0-alpha.04
 MAVEN_LIB_DESCRIPTION=six.pulse:packag