做爬虫的都知道现在越来越多的网站也已经应用了逆向技术对其数据接口进行了保护,在做爬虫时如果我们遇到了这种情况,我们可能就不得不硬着头皮来去想方设法找出其中隐含的关键逻辑了,这个过程我们可以称之为爬虫逆向。今天给大伙分享一下关于某 APP 的逆向分析并抓取数据,关于 APP 的反爬会麻烦一些,比如 Android 端的代码写完一般会进行打包并混淆加密加固,所以除了抓包之外,还需要对 APP 进行查壳脱壳反编译等复杂操作。和客户端获取数据一样,获取app数据的时候也会触发反扒机制,特别是像封IP,一般遇到封IP行为我们只要加上代理就可以很好的解决掉。关于代理的使用方式在程序里面的是大同小异的,工欲善其事,必先利其器,所以我们在选代理的时候必须要实际测试看真实性效果,比如亿牛云就是比较靠谱的代理商,代理在里面的实现具体实例如下:import org.apache.commons.httpclient.Credentials;
import org.apache.commons.httpclient.HostConfiguration;
import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.HttpMethod;
import org.apache.commons.httpclient.HttpStatus;
import org.apache.commons.httpclient.UsernamePasswordCredentials;
import org.apache.commons.httpclient.auth.AuthScope;
import org.apache.commons.httpclient.methods.GetMethod;
import java.io.IOException;
public class Main {
# 代理服务器(产品官网 www.16yun.cn)
private static final String PROXY_HOST = "t.16yun.cn";
private static final int PROXY_PORT = 31111;
public static void main(String[] args) {
HttpClient client = new HttpClient();
HttpMethod method = new GetMethod("https://httpbin.org/ip");
HostConfiguration config = client.getHostConfiguration();
config.setProxy(PROXY_HOST, PROXY_PORT);
client.getParams().setAuthenticationPreemptive(true);
String username = "16ABCCKJ";
String password = "712323";
Credentials credentials = new UsernamePasswordCredentials(username, password);
AuthScope authScope = new AuthScope(PROXY_HOST, PROXY_PORT);
client.getState().setProxyCredentials(authScope, credentials);
try {
client.executeMethod(method);
if (method.getStatusCode() == HttpStatus.SC_OK) {
String response = method.getResponseBodyAsString();
System.out.println("Response = " + response);
}
} catch (IOException e) {
e.printStackTrace();
} finally {
method.releaseConnection();
}
}
}从以上最简单的app逆向爬虫中我们可以看到现在数据加密已经很普遍了,随便一个很小的 app 都有好几道数据保护机制,以上还只是涉及到 java 层的加密,还有很多更复杂的加密机制等着我们去破解,所以我们需要不断的更新我们的爬虫知识。若有收获,就点个赞吧