- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试在此站点中获取动漫列表,https://ww1.gogoanime.io
这是代码,
org.jsoup.Connection.Response usage = Jsoup.connect("https://ww1.gogoanime.io/anime-list-A")
.header("accept", "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8")
.header("accept-encoding", "gzip, deflate, sdch, br")
.header("accept-language", "en-US,en;q=0.8")
.header("cache-control", "max-age=0")
.header("user-agent", "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.133 Safari/537.36")
.header("upgrade-insecure-requests", "1")
.ignoreHttpErrors(true)
.followRedirects(true)
.method(Connection.Method.GET)
.timeout(30000)
.execute();
System.out.println(usage.parse());
此代码适用于其他网站,但对于此网站,结果是 Cloudflare DDOS 保护我已经添加了所有的标题,但是 chrome 可以毫无问题地访问这个 url。
顺便说一句,如果我没有设置,
ignoreHttpErrors(true)
为 true,这将引发异常 503。无论我做什么,它都不会消失,直到我将其更改为 true。所以我被困在 ddos 保护页面,它说将在 5 秒内重定向到该网站。
我也尝试了下面的代码,
org.jsoup.Connection.Response usage = Jsoup.connect("https://ww1.gogoanime.io/anime-list-A")
.header("accept", "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8")
.header("accept-encoding", "gzip, deflate, sdch, br")
.header("accept-language", "en-US,en;q=0.8")
.header("cache-control", "max-age=0")
.header("user-agent", "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.133 Safari/537.36")
.header("upgrade-insecure-requests", "1")
.ignoreHttpErrors(true)
.followRedirects(true)
.method(Connection.Method.GET)
.timeout(30000)
.execute();
Thread.sleep(5000);
org.jsoup.Connection.Response usg = Jsoup.connect("https://ww1.gogoanime.io/anime-list-A")
.header("accept", "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8")
.header("accept-encoding", "gzip, deflate, sdch, br")
.header("accept-language", "en-US,en;q=0.8")
.header("cache-control", "max-age=0")
.header("user-agent", "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.133 Safari/537.36")
.header("upgrade-insecure-requests", "1")
.ignoreHttpErrors(true)
.followRedirects(true)
.cookies(usage.cookies())
.method(Connection.Method.GET)
.timeout(30000)
.execute();
这也没有用。我的浏览器访问这个 url 没有任何问题。所以我认为它与jsoup有关?
顺便说一句,我认为这是关于证书的东西,所以我也使用了它。但它也没有用。
TrustManager[] trustAllCerts = new TrustManager[] { new X509TrustManager() {
public java.security.cert.X509Certificate[] getAcceptedIssuers() {
return null;
}
public void checkClientTrusted(java.security.cert.X509Certificate[] certs, String authType) {
}
public void checkServerTrusted(java.security.cert.X509Certificate[] certs, String authType) {
}
} };
// Install the all-trusting trust manager
try {
SSLContext sc = SSLContext.getInstance("SSL");
sc.init(null, trustAllCerts, new java.security.SecureRandom());
HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());
} catch (Exception e) {
throw new RuntimeException(e);
}
最佳答案
这是我的做法。在您的项目中,像这样创建一个 CloudFlare.java 类:
import android.os.Looper;
import android.text.TextUtils;
import android.util.Log;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.CookieHandler;
import java.net.CookieManager;
import java.net.CookiePolicy;
import java.net.HttpCookie;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import com.eclipsesource.v8.V8;
public class Cloudflare {
private String mUrl;
private String mUser_agent;
private cfCallback mCallback;
private int mRetry_count;
private URL ConnUrl;
private List<HttpCookie> mCookieList;
private CookieManager mCookieManager;
private HttpURLConnection mCheckConn;
private HttpURLConnection mGetMainConn;
private HttpURLConnection mGetRedirectionConn;
private static final int MAX_COUNT = 5;
private static final int CONN_TIMEOUT = 60000;
private static final String ACCEPT = "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;";
private boolean canVisit = false;
public Cloudflare(String url) {
mUrl = url;
}
public Cloudflare(String url, String user_agent) {
mUrl = url;
mUser_agent = user_agent;
}
public String getUser_agent() {
return mUser_agent;
}
public void setUser_agent(String user_agent) {
mUser_agent = user_agent;
}
public void getCookies(final cfCallback callback){
new Thread(new Runnable() {
@Override
public void run() {
urlThread(callback);
}
}).start();
}
private void urlThread(cfCallback callback){
mCookieManager = new CookieManager();
mCookieManager.setCookiePolicy(CookiePolicy.ACCEPT_ALL); //接受所有cookies
CookieHandler.setDefault(mCookieManager);
HttpURLConnection.setFollowRedirects(false);
while (!canVisit){
if (mRetry_count>MAX_COUNT){
break;
}
try {
int responseCode = checkUrl();
if (responseCode==200){
canVisit=true;
break;
}else {
getVisiteCookie();
}
} catch (IOException | InterruptedException e) {
if (mCookieList!=null){
mCookieList.clear();
}
e.printStackTrace();
} finally {
closeAllConn();
}
mRetry_count++;
}
if (callback!=null){
Looper.prepare();
if (canVisit){
callback.onSuccess(mCookieList);
}else {
e("Get Cookie Failed");
callback.onFail();
}
}
}
private void getVisiteCookie() throws IOException, InterruptedException {
ConnUrl = new URL(mUrl);
mGetMainConn = (HttpURLConnection) ConnUrl.openConnection();
mGetMainConn.setRequestMethod("GET");
mGetMainConn.setConnectTimeout(CONN_TIMEOUT);
mGetMainConn.setReadTimeout(CONN_TIMEOUT);
if (!TextUtils.isEmpty(mUser_agent)){
mGetMainConn.setRequestProperty("user-agent",mUser_agent);
}
mGetMainConn.setRequestProperty("accept",ACCEPT);
mGetMainConn.setRequestProperty("referer", mUrl);
if (mCookieList!=null&&mCookieList.size()>0){
mGetMainConn.setRequestProperty("cookie",listToString(mCookieList));
}
mGetMainConn.setUseCaches(false);
mGetMainConn.connect();
switch (mGetMainConn.getResponseCode()){
case HttpURLConnection.HTTP_OK:
e("MainUrl","visit website success");
return;
case HttpURLConnection.HTTP_FORBIDDEN:
e("MainUrl","IP block or cookie err");
return;
case HttpURLConnection.HTTP_UNAVAILABLE:
InputStream mInputStream = mCheckConn.getErrorStream();
BufferedReader mBufferedReader = new BufferedReader(new InputStreamReader(mInputStream));
StringBuilder sb = new StringBuilder();
String str;
while ((str = mBufferedReader.readLine()) != null){
sb.append(str);
}
mInputStream.close();
mBufferedReader.close();
mCookieList = mCookieManager.getCookieStore().getCookies();
str = sb.toString();
getCheckAnswer(str);
break;
default:
break;
}
}
/**
* 获取值并跳转获得cookies
* @param str
*/
private void getCheckAnswer(String str) throws InterruptedException, IOException {
String jschl_vc = regex(str,"name=\"jschl_vc\" value=\"(.+?)\"").get(0); //正则取值
String pass = regex(str,"name=\"pass\" value=\"(.+?)\"").get(0); //
double jschl_answer = get_answer(str);
e(String.valueOf(jschl_answer));
Thread.sleep(3000);
String req = String.valueOf("https://"+ConnUrl.getHost())+"/cdn-cgi/l/chk_jschl?"
+"jschl_vc="+jschl_vc+"&pass="+pass+"&jschl_answer="+jschl_answer;
e("RedirectUrl",req);
getRedirectResponse(req);
}
private void getRedirectResponse(String req) throws IOException {
HttpURLConnection.setFollowRedirects(false);
mGetRedirectionConn = (HttpURLConnection) new URL(req).openConnection();
mGetRedirectionConn.setRequestMethod("GET");
mGetRedirectionConn.setConnectTimeout(CONN_TIMEOUT);
mGetRedirectionConn.setReadTimeout(CONN_TIMEOUT);
if (!TextUtils.isEmpty(mUser_agent)){
mGetRedirectionConn.setRequestProperty("user-agent",mUser_agent);
}
mGetRedirectionConn.setRequestProperty("accept",ACCEPT);
mGetRedirectionConn.setRequestProperty("referer", req);
if (mCookieList!=null&&mCookieList.size()>0){
mGetRedirectionConn.setRequestProperty("cookie",listToString(mCookieList));
}
mGetRedirectionConn.setUseCaches(false);
mGetRedirectionConn.connect();
switch (mGetRedirectionConn.getResponseCode()){
case HttpURLConnection.HTTP_OK:
mCookieList = mCookieManager.getCookieStore().getCookies();
break;
case HttpURLConnection.HTTP_MOVED_TEMP:
mCookieList = mCookieManager.getCookieStore().getCookies();
break;
default:throw new IOException("getOtherResponse Code: "+
mGetRedirectionConn.getResponseCode());
}
}
private int checkUrl()throws IOException {
URL ConnUrl = new URL(mUrl);
mCheckConn = (HttpURLConnection) ConnUrl.openConnection();
mCheckConn.setRequestMethod("GET");
mCheckConn.setConnectTimeout(CONN_TIMEOUT);
mCheckConn.setReadTimeout(CONN_TIMEOUT);
if (!TextUtils.isEmpty(mUser_agent)){
mCheckConn.setRequestProperty("user-agent",mUser_agent);
}
mCheckConn.setRequestProperty("accept",ACCEPT);
mCheckConn.setRequestProperty("referer",mUrl);
if (mCookieList!=null&&mCookieList.size()>0){
mCheckConn.setRequestProperty("cookie",listToString(mCookieList));
}
mCheckConn.setUseCaches(false);
mCheckConn.connect();
return mCheckConn.getResponseCode();
}
private void closeAllConn(){
if (mCheckConn!=null){
mCheckConn.disconnect();
}
if (mGetMainConn!=null){
mGetMainConn.disconnect();
}
if (mGetRedirectionConn!=null){
mGetRedirectionConn.disconnect();
}
}
public interface cfCallback{
void onSuccess(List<HttpCookie> cookieList);
void onFail();
}
private double get_answer(String str) { //取值
double a = 0;
try {
List<String> s = regex(str,"var s,t,o,p,b,r,e,a,k,i,n,g,f, " +
"(.+?)=\\{\"(.+?)\"");
String varA = s.get(0);
String varB = s.get(1);
StringBuilder sb = new StringBuilder();
sb.append("var a=");
sb.append(regex(str,varA+"=\\{\""+varB+"\":(.+?)\\}").get(0));
sb.append(";");
List<String> b = regex(str,varA+"\\."+varB+"(.+?)\\;");
for (int i =0;i<b.size()-1;i++){
sb.append("a");
sb.append(b.get(i));
sb.append(";");
}
e("add",sb.toString());
V8 v8 = V8.createV8Runtime();
a = v8.executeDoubleScript(sb.toString());
List<String> fixNum = regex(str,"toFixed\\((.+?)\\)");
if (fixNum!=null){
a = Double.parseDouble(v8.executeStringScript("String("+String.valueOf(a)+".toFixed("+fixNum.get(0)+"));"));
}
a += new URL(mUrl).getHost().length();
v8.release();
}catch (IndexOutOfBoundsException e){
e("answerErr","get answer error");
e.printStackTrace();
}
catch (MalformedURLException e) {
e.printStackTrace();
}
return a;
}
/**
* 正则
* @param text 本体
* @param pattern 正则式
* @return List<String>
*/
private List<String> regex(String text, String pattern){
try {
Pattern pt = Pattern.compile(pattern);
Matcher mt = pt.matcher(text);
List<String> group = new ArrayList<>();
while (mt.find()) {
if (mt.groupCount() >= 1) {
if (mt.groupCount()>1){
group.add(mt.group(1));
group.add(mt.group(2));
}else group.add(mt.group(1));
}
}
return group;
}catch (NullPointerException e){
Log.i("MATCH","null");
}
return null;
}
/**
* 转换list为 ; 符号链接的字符串
* @param list
* @return
*/
public static String listToString(List list ) {
char separator = ";".charAt(0);
StringBuilder sb = new StringBuilder();
for (int i = 0; i < list.size(); i++) {
sb.append(list.get(i)).append(separator);
}
return sb.toString().substring(0, sb.toString().length() - 1);
}
/**
* 转换为jsoup可用的Hashmap
* @param list HttpCookie列表
* @return Hashmap
*/
public static Map<String,String> List2Map(List<HttpCookie> list){
Map<String, String> map = new HashMap<>();
try {
if (list != null) {
for (int i = 0; i < list.size(); i++) {
String[] listStr = list.get(i).toString().split("=");
map.put(listStr[0], listStr[1]);
}
Log.i("List2Map", map.toString());
} else {
return map;
}
} catch (IndexOutOfBoundsException e) {
e.printStackTrace();
}
return map;
}
private void e(String tag,String content){
Log.e(tag,content);
}
private void e(String content){
Log.e("cloudflare",content);
}
现在要使用它,只需像这样调用上面的类并将 cookie 转换为 Map 以便与 jsoup 一起使用:
Cloudflare cf = new Cloudflare("YOUR URL HERE");
cf.setUser_agent("YOUR USER AGENT HERE");
cf.getCookies(new Cloudflare.cfCallback() {
@Override
public void onSuccess(List< HttpCookie > cookieList) {
//convert the cookielist to a map
Map<String, String> cookies = Cloudflare.List2Map(cookieList);
Log.d("COOKIES : ", cookies.toString());
}
@Override
public void onFail() {
Log.d("OMG IT FAILED!!!");
}
});
接下来,在 onSuccess
中启动您的异步任务,并在您的 doinbackground 中的 jsoup 请求中使用 cookie 和相同的用户代理。像这样:
try {
Connection.Response response = Jsoup.connect("YOUR URL HERE").userAgent("YOUR USER AGENT HERE").cookies(cookies).execute();
Document doc = response.parse();
Log.d("THE DOCUMENT : ", doc.toString());
} catch (Exception M){
M.printStackTrace();
}
在 .gradle[app] 中将其添加到您的依赖项中:
implementation 'com.eclipsesource.j2v8:j2v8_android:3.0.5@aar'
关于java - 如何使用 JSOUP 绕过 cloudflare ddos 或 5 秒后重定向?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43453491/
1、什么是DDoS DDoS 攻击的目的是让真正的最终用户无法访问目标系统,例如网站或应用程序。通常,攻击者会向目标系统发送大量数据包或请求,从而使目标系统不堪重负。 我们可以把他想象成堵
前言 传统的 DDOS 防御通常使用“硬抗”的方式,导致开销很大,而且有时效果并不好。例如使用 DNS 切换故障 IP 的方案,由于域名会受到缓存等因素的影响通常有分钟级延时,前端难以快速生效。例
我想购买自己的网站 www.zzzwew.com 并对其进行 DDoS,但看起来行不通... 因此,如果我得到一个 goDaddy 页面并尝试对其进行 DDoS 攻击,那会损害 GoDaddy 的一般
我在一个经常受到机器人网络攻击的网站工作。我们已经开始使用这个工具:http://deflate.medialayer.com/哪个自动禁止具有比设置值更多的开放连接的 ip。默认情况下它设置为 15
我有一个应用程序,用户可以在其中注册并输入他们的手机和其他数据。 为了验证用户是否有效,在我将其保存到我的数据库之前,我向用户发送了一 strip 有代码的短信。之后他们应该在表单中输入代码。 问题是
我想知道的是,当发生 ddos 攻击时,Google Analytics 会显示什么样的行为?有什么理论吗? 最佳答案 我的理论是,有效的 DDoS 平台/脚本将不包含任何重量级的 JavaScr
所以,我想获得更多使用高流量网站的经验,但不幸的是,互联网并没有打开我博客的大门。 如何在我的博客上模拟每秒数十/数百次点击并测试其性能?我在共享服务器上使用 SSH 帐户托管我的博客。 最佳答案 您
我正在开发在 Azure 中托管的项目,该项目在幕后使用 Azure 服务,例如设备预配服务和 SignalR。那么,问题很简单 - 如何减轻对 Azure SignalR 和设备配置服务的 DDOS
DDoS(分布式拒绝服务攻击)通常在服务器级别被阻止,对吗? 有没有办法在 PHP 级别阻止它,或者至少减少它? 如果没有,阻止 DDoS 攻击的最快和最常见的方法是什么? 最佳答案 DDOS 是一系
关闭。这个问题是off-topic .它目前不接受答案。 想改善这个问题吗? Update the question所以它是 on-topic对于堆栈溢出。 10 年前关闭。 Improve this
很难说出这里要问什么。这个问题模棱两可、含糊不清、不完整、过于宽泛或夸夸其谈,无法以目前的形式得到合理的回答。如需帮助澄清此问题以便重新打开,visit the help center . 关闭 1
我正在尝试学习一些有关计算机安全的知识,并且我想编写一个项目来防止 DDoS 攻击。 我在理论上完全理解 DDoS 攻击,现在我想看到一些行动。 我只是想问一下我应该使用什么语言以及我应该实现什么以节
我有一个问题,我构建了这个小脚本来检查某个 ip 是否正在淹没我的网站。当它出现时,我拒绝 .htaccess 文件中的 ip。我的问题是,有人可以告诉我这个脚本是否完全无用或值得尝试...该脚本在配
2023年10月2日19:32,收到阿里云的通知短信: 【阿里云】尊敬的xxx:您的IP:xxx.xxx.xxx.xxxx 实例名称:blog-xxxxxx 受到攻击,攻击流量已超过DD
在处理对运行 node.js 等非阻塞框架的应用程序的 DDoS 攻击时,是否有任何固有的优点或缺点? 据我了解,这些攻击通过大量请求使系统资源过载 - 导致它失败。非阻塞框架能够处理比阻塞请求更多的
我需要从远程 http 服务器获取一些数据。我正在使用 Curl 类进行多请求。我的问题是远程服务器的防火墙。我在 10000 个 GET 和 POST 请求之间发送 1000 个。服务器禁止我使用
我正在 Microsoft Azure 中运行企业级应用程序。我想知道 Microsoft Azure 中 DDOS 投影的建议是什么。该文档明确指出该平台受到 DDOS 保护,但没有提供更多详细信息
在过去的几天里,我的网站一直是 ddos。 我搞砸了我所有的谷歌分析结果。有没有办法从我的谷歌分析中删除 ddos 攻击中的流量。 最佳答案 一旦数据被收集到您的 View 中,您就无法删除这
我正在为自己的应用程序使用 Azure 负载测试,我刚刚意识到我可以在“测试目标”字段中输入任何 URL。这是否意味着任何 Azure 订阅者都可以针对我的网站“模拟”1,000,000 个并发用户,
我有一个基于 Django 的 Web 应用程序托管在 Azure 配置的虚拟机(Ubuntu 操作系统)上。我的应用程序最近遭遇了 DDoS 攻击,我们对此束手无策。 问题是,一旦流量到达服务器 -
我是一名优秀的程序员,十分优秀!