JAVA对接小蓝鸟SDK问题

469 阅读2分钟

1.最近需要对接小蓝鸟,通过官方apiv2和sdk2种方式 ,sdk由于进行封装无法代理的问题 和sdk文件无法找到问题解决

版本 com.twitter twitter-api-java-sdk 2.0.3

在这里插入图片描述

这里显示无法找到sdk文件 源码我们也看了 打开jar文件并没有发现该文件, 下面我们看一下官方git 在这里插入图片描述 这里是又该文件的 ,我们将源码下载下来进行修改编译

public class SDKConfig {
  private static final Properties sdkProperties = new Properties();
  private static final List<String> allowlistedExcludeInputFields;

  static {
    try {
      InputStream inputStream = Thread.currentThread().getContextClassLoader().getResourceAsStream("sdk.properties");
      sdkProperties.load(inputStream);
    } catch (Exception e) {
      e.printStackTrace();
    }
    String sdkExcludeInputFields = sdkProperties.getProperty("sdk.exclude.fields");
    sdkExcludeInputFields = sdkExcludeInputFields == null ? "" : sdkExcludeInputFields;
    allowlistedExcludeInputFields = Collections.unmodifiableList(Arrays.asList(sdkExcludeInputFields.split("[, ]+")));
  }

  public static boolean isFieldAllowlisted(String field ) {
    return allowlistedExcludeInputFields.contains(field);
  }
}

我们将源代码进行修改,读取本地的sdk文件 将git的sdk文件存放到项目里面,会解决掉找不到sdk文件问题, 当然这时候编译会出现一个问题就是 一部分源码里的jar引不到 这需要重新在源码里引入一下相应的pom即可.

2.由于小蓝鸟域名在黑名单我们需要进行代理

下面我们根据源码找到

在这里插入图片描述

我们需要在这里对request进行代理操作


    /**
     * Build HTTP call with the given options.
     *
     * @param path The sub-path of the HTTP URL
     * @param method The request method, one of "GET", "HEAD", "OPTIONS", "POST", "PUT", "PATCH" and "DELETE"
     * @param queryParams The query parameters
     * @param collectionQueryParams The collection query parameters
     * @param body The request body object
     * @param headerParams The header parameters
     * @param cookieParams The cookie parameters
     * @param formParams The form parameters
     * @param authNames The authentications to apply
     * @param callback Callback for upload/download progress
     * @return The HTTP call
     * @throws com.twitter.clientlib.ApiException If fail to serialize the request body object
     */
    public Call buildCall(String path, String method, List<Pair> queryParams, List<Pair> collectionQueryParams, Object body, Map<String, String> headerParams, Map<String, String> cookieParams, Map<String, Object> formParams, String[] authNames, ApiCallback callback) throws ApiException {
        Request request = buildRequest(path, method, queryParams, collectionQueryParams, body, headerParams, cookieParams, formParams, authNames, callback);
        //这里添加代理
        Call call = proxyCall(request);
        return call;
      //  return httpClient.newCall(request);
    }

    /**
     * 添加代理
     * @param request
     * @return
     */
    public  Call proxyCall(Request request){
        // 创建一个 OkHttpClient 对象,用于发送 HTTP 请求
        OkHttpClient.Builder builder = new OkHttpClient.Builder();
        //设置连接超时时间
        builder.connectTimeout(180, TimeUnit.SECONDS);
        builder.readTimeout(180, TimeUnit.SECONDS);
        //设置代理,需要替换(测试时需要用到--api域名被墙)
        Proxy proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress("127.0.0.1", 自己的代理端口号));
        builder.proxy(proxy);

        OkHttpClient client = builder
                .build();
        Call call = client.newCall(request);
        return call;
    }

到这里就解决了一系列相关的问题了,问题的原因 因为sdk还在测试版会有一些问题