QQ浏览器 v12.2.3.7053版本的 MD5 值为:8285ab3059e5c8b521a264dfbc5c3685
以下内容为反编译后的 DownloadConnection.java 源代码,内容仅作参考
package com.tencent.mtt.browser.download.engine.network;
import android.text.TextUtils;
import com.tencent.common.http.MttRequestBase;
import com.tencent.common.http.MttResponse;
import com.tencent.common.http.Requester;
import com.tencent.common.http.RequesterFactory;
import com.tencent.mtt.browser.download.engine.network.IDownloadConnection;
import com.tencent.mtt.browser.download.engine.utils.DLogger;
import com.xiaomi.mipush.sdk.Constants;
import java.io.IOException;
import java.io.InputStream;
import java.net.URI;
import java.net.URL;
import java.net.URLEncoder;
import java.util.List;
import java.util.Map;
public class DownloadConnection implements IDownloadConnection {
private final MttRequestBase f37783a = RequesterFactory.getMttRequestBase();
private final Requester f37784b;
private final String f37785c;
private volatile boolean f37786d;
public DownloadConnection(String str) {
this.f37785c = str;
this.f37783a.setRequestType(MttRequestBase.REQUEST_FILE_DOWNLOAD);
this.f37783a.setUrl(str);
int i = 0;
try {
String host = new URL(str).getHost();
if (!TextUtils.isEmpty(host) && host.contains("_") && host.contains(" ")) {
i = 1;
}
if (!TextUtils.isEmpty(str) && str.contains(" ")) {
this.f37783a.setUrl(URLEncoder.encode(str, "utf-8").replaceAll("\\+", "%20").replaceAll("%3A", Constants.COLON_SEPARATOR).replaceAll("%2F", "/"));
}
} catch (Exception unused) {
}
this.f37784b = RequesterFactory.getRequester(i);
}
public static String c(String str, String str2) {
if (str2 != null && str2.startsWith("/")) {
try {
URI uri = new URI(str);
URI uri2 = new URI("https://test.com" + str2);
return new URI(uri.getScheme(), uri.getUserInfo(), uri.getHost(), uri.getPort(), uri2.getPath(), uri2.getQuery(), uri2.getFragment()).toString();
} catch (Exception unused) {
}
}
return str2;
}
@Override
public String a() {
return this.f37783a.getCookie();
}
@Override
public void a(int i) {
this.f37784b.setReadTimeout(i);
}
@Override
public void a(final IDownloadConnection.IRequestInterceptor iRequestInterceptor) {
if (iRequestInterceptor != null) {
this.f37783a.setRequestInterceptor(new MttRequestBase.IRequestInterceptor() {
@Override
public void onHeaderIntercept(MttRequestBase mttRequestBase, Map<String, String> map) {
iRequestInterceptor.a(DownloadConnection.this);
}
});
}
}
@Override
public void a(String str) {
this.f37783a.removeHeader(str);
}
@Override
public void a(String str, String str2) {
this.f37783a.addHeader(str, str2);
}
@Override
public Map<String, String> b() {
return this.f37783a.getHeaders();
}
@Override
public void b(int i) {
this.f37784b.setConnectTimeout(i);
}
@Override
public void b(String str) {
this.f37783a.setCookie(str);
this.f37784b.setCookieEnable(false);
}
@Override
public void c() {
if (this.f37786d) {
return;
}
this.f37786d = true;
this.f37784b.close();
this.f37783a.setRequestInterceptor(null);
DLogger.a("QB_DOWN::DownConn", "connection [CLOSE]");
}
@Override
public void c(String str) {
this.f37783a.setReferer(str);
}
@Override
public String d() {
return this.f37785c;
}
@Override
public boolean d(String str) {
if ("GET".equals(str)) {
this.f37783a.setMethod((byte) 0);
} else if ("POST".equals(str)) {
this.f37783a.setMethod((byte) 1);
} else {
if (!MttRequestBase.METHOD_NAME_HEAD.equals(str)) {
return false;
}
this.f37783a.setMethod((byte) 2);
}
return true;
}
@Override
public IDownloadConnection.IResponse e() throws Exception {
DLogger.a("QB_DOWN::DownConn", "connection [EXECUTE]");
final MttResponse execute = this.f37784b.execute(this.f37783a);
if (execute == null) {
return null;
}
return new IDownloadConnection.IResponse() {
@Override
public int a() {
return execute.getStatusCode().intValue();
}
@Override
public String a(String str) {
return execute.getHeaderField(str);
}
@Override
public InputStream b() throws IOException {
return execute.getInputStream();
}
@Override
public Map<String, List<String>> c() {
return execute.getRspHeaderMaps();
}
@Override
public String d() {
return DownloadConnection.c(DownloadConnection.this.f37785c, execute.getLocation());
}
};
}
@Override
public void e(String str) {
this.f37783a.setPostData(str);
}
}