как обойти защиту cloudflare ddos ​​и разобрать html? - PullRequest
1 голос
/ 07 августа 2020

Мое приложение работало нормально До тех пор, пока сайт, на котором я импортировал информацию, не начал использовать защиту Cloudflare, я некоторое время пытался обойти защиту Cloudflare Но это стало очень неприятно, и я не мог понять, как с ним бороться

это мои коды: NetworkUtils.kt

object NetworkUtils {

private const val TAG = "NetworkUtils"
const val HTTP_GET = "GET"
const val HTTP_POST = "POST"
const val HTTP_PUT = "PUT"
const val HTTP_DELETE = "DELETE"

private val client by lazy {
    OkHttpClient.Builder()
            .apply {
                if (BuildConfig.DEBUG) addInterceptor(OkHttpProfilerInterceptor())
            }
            .followSslRedirects(true)
            .followRedirects(true)
            .connectTimeout(15, TimeUnit.SECONDS)
            .addInterceptor(UserAgentInterceptor())

            .build()
}

@JvmStatic
@Throws(IOException::class)
fun httpGet(url: String, cookie: String? = null): Document {

    

        val request = Request.Builder()
            .url(url)
            .get()
    if (!cookie.isNullOrBlank()) {
        request.header("Cookie", cookie)
    }
    return client.newCall(request.build()).execute().use { response ->
        Jsoup.parse(response.body()?.string(), url)
    }
}




@Deprecated("")
@JvmStatic
@Throws(IOException::class)
fun httpPost(url: String, cookie: String?, data: Array<String>) =
        httpPost(url, cookie, data.toList().zipWithNext { a, b -> a to b }.toMap())

@JvmStatic
@Throws(IOException::class)
fun httpPost(url: String, cookie: String? = null, data: Map<String, String>? = null): Document {
    val body = FormBody.Builder()
    data?.entries?.forEach { x -> body.addEncoded(x.key, x.value) }
    val request = Request.Builder()
            .url(url)
            .post(body.build())
    if (!cookie.isNullOrBlank()) {
        request.header("Cookie", cookie)
    }
    return client.newCall(request.build()).execute().use { response ->
        Jsoup.parse(response.body()?.string(), url)
    }
}}

webProvider. java

public abstract class webProvider {

protected boolean features[];
private final SharedPreferences mPrefs;



public static Document getPage(String url) throws IOException {
    return NetworkUtils.httpGet(url, null);
}

public static Document getPage(String url, @NonNull String cookie) throws IOException {
    return NetworkUtils.httpGet(url, null);
}

protected final Document postPage(String url, String... data) throws IOException {
    return NetworkUtils.httpPost(url, getAuthCookie(), data);
}



public webProvider(Context context) {
    mPrefs = context.getSharedPreferences("prov_" + this.getClass().getSimpleName(), Context.MODE_PRIVATE);
}

@NonNull
protected final String getStringPreference(@NonNull String key, @NonNull String defValue) {
    return mPrefs.getString(key, defValue);
}

protected final boolean getBooleanPreference(@NonNull String key, boolean defValue) {
    return mPrefs.getBoolean(key, defValue);
}

protected final int getIntPreference(@NonNull String key, int defValue) {
    return mPrefs.getInt(key, defValue);
}

//content access methods
public abstract webList getList(int page, int sort, int genre) throws Exception;

@Deprecated
public webList getList(int page, int sort) throws Exception {
    return webList(page, sort, 0);
}

@Deprecated
public webList getList(int page) throws Exception {
    return webList(page, 0, 0);
}



public abstract webSummary getDetailedInfo(webInfo webInfo);

public abstract ArrayList<webPage> getPages(String readLink);

public abstract String getPageImage(webPage webPage);

@Nullable
protected String getAuthCookie() {
    return null;
}

этот поставщик onma. java

public class onma extends webProvider {

public onma(Context context) {
    super(context);
}

@Override
public webList getList(int page, int sort, int genre) throws Exception {
    webList list = new webList();
    Document document = getPage("https://www.onma.me/filterList?page=" + (page + 1));

    webInfo manga;
    for (Element o : document.select("div.page-item-detail")) {
        manga = new webInfo();
        manga.name = o.select("h3").first().text();
        manga.subtitle = null;
        try {
            manga.genres = o.select("div.summary-content").last().previousElementSibling().text();
        } catch (Exception e) {
            manga.genres = "";
        }
        manga.path = o.select("a").first().attr("href");
        try {
            manga.preview = o.select("img").first().attr("src");
        } catch (Exception e) {
            manga.preview = "";
        }
        try {
            String scr = o.select("script").first().html();
            int p1 = scr.lastIndexOf('"');
            int p0 = scr.lastIndexOf('"', p1 - 1);
            manga.rating = (byte) (Float.parseFloat(scr.substring(p0 + 1, p1)) * 20);
        } catch (Exception ignored) {
        }
        //manga.rating = (byte) (Byte.parseByte(o.select("span.rate").first().text().substring(0,3).replace(".","")) * 2);
        manga.provider = onma.class;
        manga.id = manga.path.hashCode();
        list.add(manga);
    }
    return list;
}

Я хочу узнать, есть ли какие-либо возможные решения, чтобы обойти защиту от облачных вспышек И приступить к синтаксическому анализу html этого сайта Веб https://onma.me

...