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还在测试版会有一些问题