模拟HTTP请求自动登录豆瓣并发表评论

2 篇文章 0 订阅
1 篇文章 0 订阅

原理: 使用fiddler分析豆瓣登录和发表评论的http请求,然后在客户端构造相同的参数发起请求,通过模拟登录拿到cookies,然后再用cookies去发表评论,简直一气呵成
过程中碰到了验证码问题,接入第三方打码平台即可解决,实现自动循环发表评论

模拟登录获取cookies

找到豆瓣的登录页面:https://accounts.douban.com/login
输入自己的用户名 密码 然后查看抓包查看请求
抓包小提示:使用idea写的程序会发现里面的网络请求不会被fiddler抓到
另外https不设置证书也是不能抓到包的
参考:
http://jja1982.iteye.com/blog/796821
https://blog.csdn.net/wang704987562/article/details/54618498

然后在代码中设置

    System.setProperty("http.proxyHost", "127.0.0.1");
	System.setProperty("https.proxyHost", "127.0.0.1");
	System.setProperty("http.proxyPort", "8888");
    System.setProperty("https.proxyPort", "8888");

查看网络请求信息
发送的原始数据

登录豆瓣发送的参数

这边使用okhttp来封装网络请求

实际中发现个问题,登录成功后会自动跳转到豆瓣首页,通过fiddler查看的话其实会发现有两个网络请求,但其实我们只需要一个就够了,不然第二个请求那里是拿不到cookies的,所以这边要禁止重定向

        okHttpAccount = new OkHttpClient.Builder()
                // 禁止重定向
                .followRedirects(false)
                .followSslRedirects(false)
//                .cookieJar(new LocalCookieJar())
                .build();
                
 requestBody = new FormBody.Builder()
                    .add("source", "None")
                    .add("redir", "https://accounts.douban.com/login")
                    .add("form_email", "13000000000")
                    .add("form_password", "12356789")
                    .add("login", "登录")
                    .add("captcha-solution", captcha)
                    .add("captcha-id", captchaId)

        Request request = new Request.Builder()
                .url(loginAddress)
                .post(requestBody)
                .addHeader("User-Agent", User_Agent)
//                .addHeader("Host", "accounts.douban.com")
//                .addHeader("Origin", "https://www.douban.com")
//                .addHeader("Content-Type", "application/x-www-form-urlencoded")
//                .addHeader("Accept-Encoding", "gzip, deflate, br")
//                .addHeader("Accept-Language", "zh-CN,zh;q=0.9")
//                .addHeader("Cache-Control", "max-age=0")
//                .addHeader("Connection", "keep-alive")
//                .addHeader("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8")
                .build();
Response response = okHttpAccount.newCall(request).execute();

    List<String> cookieList = response.headers("Set-Cookie");
          
            StringBuffer stringBuffer = new StringBuffer();
            for (String s : cookieList) {
                stringBuffer.append(s);
            }
            String cookies = stringBuffer.toString();

这样就拿到cookies了

这就是你梦寐以求 的cookies,包含了服务器要的登录信息

获取CK

事实上光有cookies还是不够的,在评论的时候其实还需要一个参数:ck
鬼知道什么参数,反正乖乖去拿就对了
只要用上一步拿到的cookies去访问豆瓣首页即可,记得把cookies设置进去

    Request request = new Request.Builder()
                .get()
                .url("https://www.douban.com/")
                .header("Cookie", cookies)
                .build();

你看

发表评论

打开一个小组页面,手工去发表一次评论,然后查看抓包信息

手工发言

看箭头的参数信息

注意这边的Content-Type

然后继续用okhttp构造请求

 requestBody = new MultipartBody.Builder()
                    .setType(MultipartBody.FORM)
                    .addFormDataPart("ck", bean.getCk())
                    .addFormDataPart("rv_comment", content)
                    .addFormDataPart("start", "0")
                    .addFormDataPart("submit_btn", "发送")

                    .addFormDataPart("captcha-solution", captchaCode)
                    .addFormDataPart("captcha-id", captchaId)
                    .build();
       
        Request request = new Request.Builder()
                .url("https://www.douban.com/group/topic/" + groupId + "/add_comment")
                .post(requestBody)
                .addHeader("Cookie", bean.getCookies())
                // 这边偷个懒,boundary是用来分隔参数用的一个标记,只要保证和参数不同就行了,可以用MD5生成
                .addHeader("Content-Type", "boundary=----WebKitFormBoundaryk0k2SfcBeOex1BzG")
                .build();

那么查看下效果
机器人开始了

##最后用javafx搭建出UI框架收工

这里写图片描述

这里写图片描述

##后记-- 鞋湿了
当你这么做之后很快就会被发现
没错,常在河边走,被封号了
毕竟 我是个诚实的机器人,评论中已经暴露了身份

被封了

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值