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