随笔 - 82  文章 - 2 评论 - 1 阅读 - 29061
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

最近大家一直在关注滴滴的相关消息,相信大家或多或少都有了解。一方面是大家发现打车现在已经离不开滴滴,滴滴的影响力已经不知不觉超乎我们的预期;另一方面就是比较敏感的用户网络隐私安全。滴滴作为目前国内领头的打车服务提供商,对中国互联网业务延伸拓宽是有积极作用的,这一点毋庸置疑,但是随着影响力加大,市场垄断、信息不规范获取的问题也突显出来。

和pc 端数据一样,移动端的数据也是可以抓取的,那么只要是数据获取肯定有难有易的。对于app数据来说,简单的就是app的数据比web端数据更容易抓取,基本都是http、https协议,返回的数据格式也相对规整。那困难的也是真的很困难,需要掌握的技能比较多,比如app逆向、app脱壳、破解加密等。app抓取和网页一样也是会需要反爬的,所以基本的加代理,研究反爬策略也是必须的。

部分抓取app代码分享:

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://www.xiaohongshu.com/");

        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中流经的网络数据包,捕获原始的数据,如果我们可以分析得到请求的URL和参数的规律,直接用程序模拟即可批量抓取,这当然最好不过了。但是随着技术的发展,App接口往往会带有密钥,我们并不能直接找到这些规律,所以我们需要学习更多的技术。

posted on   小橙子11  阅读(416)  评论(0编辑  收藏  举报
编辑推荐:
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?
· 使用C#创建一个MCP客户端
点击右上角即可分享
微信分享提示