百度贴吧一键签到Java源码
😂 这篇文章最后更新于1725天前,您需要注意相关的内容是否还可用。
需要自己设置bduss,bduss设置方法:
登录百度后在首页按F12,在调试窗口左上角Filter中填www.baidu.com
在Headers选项卡中Request Headers中找到BDUSS=复制其后的字符 赋值给代码中的bduss即可
所需依赖:
<dependency> <groupId>org.apache.httpcomponents</groupId> <artifactId>httpclient</artifactId> <version>4.5.8</version> </dependency> <dependency> <groupId>org.apache.httpcomponents</groupId> <artifactId>httpcore</artifactId> <version>4.4.6</version> </dependency> <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-lang3</artifactId> <version>3.8.1</version> </dependency> <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.58</version> </dependency>
或者直接用commons-httpclient的依赖,commons-httpclient包含httpclient与httpcore包里部分内容
<dependency> <groupId>commons-httpclient</groupId> <artifactId>commons-httpclient</artifactId> <version>3.1</version> </dependency>
如果你使用普通导jar包的Java项目,则需要的jar包除了以上之外还需要的jar有:commons-logging、commons-codec,可自行在Maven仓库下载
代码:
/** * Author: https://cway.top * Date: 2019/7/9 * Time: 10:35 * Description: 百度签到 */ class BaiduSigner { /** * 百度签到 */ public static void main(String[] args) throws Exception { PoolingHttpClientConnectionManager cm = new PoolingHttpClientConnectionManager(); cm.setMaxTotal(200); // 设置最大连接数 cm.setDefaultMaxPerRoute(10); // 设置每个主机的并发数 // String bduss=args[0]; String bduss = ""; // 设置自己的bduss字符 或者从args获取 JSONObject tbs = (JSONObject) JSON.parse(getTbs(bduss, cm)); if (!tbs.getString("is_login").equals("1")) { System.out.println("可能cookie失效咯"); return; } System.out.println("登录成功>>>>>"); String tbstr = tbs.getString("tbs"); // System.out.println(vipSign(tbstr, bduss, cm)); //vip一键签到 一般不需要 JSONObject jo = (JSONObject) JSON.parse(getForums(bduss, cm)); JSONObject forum_list = jo.getJSONObject("forum_list"); JSONArray jsonArray = forum_list.getJSONArray("non-gconforum"); System.out.println("获取列表成功>>>>>"); int n = 0; int count = 0; for (Object o : jsonArray) { System.out.println("==========第" + ++n + "个=========="); JSONObject forum = (JSONObject) JSON.toJSON(o); String id = forum.getString("id"); String name = forum.getString("name"); System.out.println("正在签到" + name + ":"); String signResult = signForums(name, id, tbstr, bduss, cm); JSONObject result = (JSONObject) JSON.parse(signResult); if (signResult.contains("error_code") && signResult.contains("error_msg")) { System.out.println(result.getString("error_msg")); continue; } JSONObject user_info = result.getJSONObject("user_info"); System.out.println("签到成功!经验+" + user_info.getString("sign_bonus_point") + ",今天第" + user_info.getString("user_sign_rank") + "个签到"); count++; } System.out.println("共签到成功" + count + "个贴吧"); } /** * 获取贴吧状态码 tbs */ public static String getTbs(String bduss, PoolingHttpClientConnectionManager cm) throws Exception { String header = "Cookie=" + "BDUSS=" + bduss; return postClient("http://tieba.baidu.com/dc/common/tbs", header, "", cm).getResponseStr(); } /** * 获取所有关注贴吧 */ public static String getForums(String bduss, PoolingHttpClientConnectionManager cm) throws Exception { String header = new StringBuilder().append("Cookie=BDUSS=").append(bduss).append("&") .append("Content-Type=application/x-www-form-urlencoded&Charset=UTF-8&net=3&") .append("User-Agent=bdtb for Android 8.4.0.1&Connection=Keep-Alive&Accept-Encoding=gzip&") .append("Host=c.tieba.baidu.com").toString(); String md5Hex = DigestUtils.md5Hex(new StringBuilder().append("BDUSS=").append(bduss) .append("_client_version=8.1.0.4page_no=1page_size=100tiebaclient!!!") .toString()); String body = new StringBuilder().append("BDUSS=").append(bduss).append("&") .append("_client_version=8.1.0.4&page_no=1&page_size=100&sign=") .append(md5Hex).toString(); return postClient("http://c.tieba.baidu.com/c/f/forum/like", header, body, cm).getResponseStr(); } /** * 签到 */ public static String signForums(String name, String id, String tbs, String bduss, PoolingHttpClientConnectionManager cm) throws Exception { String header = new StringBuilder().append("Cookie=BDUSS=").append(bduss).append("&") .append("Content-Type=application/x-www-form-urlencoded&Charset=UTF-8&net=3&") .append("User-Agent=bdtb for Android 8.4.0.1&Connection=Keep-Alive&Accept-Encoding=gzip&") .append("Host=c.tieba.baidu.com").toString(); String md5Hex = DigestUtils.md5Hex(new StringBuilder().append("BDUSS=").append(bduss) .append("fid=" + id + "kw=" + name + "tbs=" + tbs + "tiebaclient!!!") .toString()); String body = new StringBuilder().append("BDUSS=").append(bduss) .append("&fid=").append(id).append("&kw=").append(name) .append("&sign=").append(md5Hex).append("&tbs=").append(tbs).toString(); return postClient("http://c.tieba.baidu.com/c/c/forum/sign", header, body, cm).getResponseStr(); } /** * VIP签到 */ public static String vipSign(String tbs, String bduss, PoolingHttpClientConnectionManager cm) throws Exception { String firefoxHeader = "Content-Type: application/x-www-form-urlencoded\n" + "Charset: UTF-8\n" + "net: 3\n" + "User-Agent: bdtb for Android 8.4.0.1\n" + "Connection: Keep-Alive\n" + "Accept-Encoding: gzip\n" + "Host: c.tieba.baidu.com"; firefoxHeader = firefoxHeader.replaceAll(": ", "=").replaceAll("\n", "&"); System.out.println("火狐:" + firefoxHeader); String header = new StringBuilder().append("Cookie=BDUSS=").append(bduss).append("&") .append(firefoxHeader).toString(); String body = new StringBuilder().append("ie=utf-8&tbs=").append(tbs).toString(); return postClient("http://tieba.baidu.com/tbmall/onekeySignin1", header, body, cm).getResponseStr(); } /** * post封装 * * @param url 请求URL * @param header 请求头 * @param body 请求体 * @param cm cm连接池 * @return 返回Response与页面字符 * @throws Exception */ public static ResponseVo postClient(String url, String header, String body, PoolingHttpClientConnectionManager cm) throws Exception { CloseableHttpClient client = HttpClients.custom().setConnectionManager(cm).build(); HttpPost httpPost = new HttpPost(url); if (StringUtils.isNotBlank(header)) { for (Map.Entry<String, String> entry : covertParam(header)) { httpPost.addHeader(entry.getKey(), entry.getValue()); } } List<NameValuePair> pairs = new ArrayList<>(); if (StringUtils.isNotBlank(body)) { for (Map.Entry<String, String> entry : covertParam(body)) { pairs.add(new BasicNameValuePair(entry.getKey(), entry.getValue())); } } UrlEncodedFormEntity formEntity = new UrlEncodedFormEntity(pairs, "utf-8"); httpPost.setEntity(formEntity); String content = null; CloseableHttpResponse response = null; ResponseVo responseVo = null; try { //使用HttpClient发起请求 response = client.execute(httpPost); //判断响应状态码是否为200 if (response.getStatusLine().getStatusCode() == 200) { //如果为200表示请求成功,获取返回数据 content = EntityUtils.toString(response.getEntity(), "UTF-8"); responseVo = new ResponseVo().setResponse(response).setResponseStr(content); } } catch (Exception e) { e.printStackTrace(); } finally { //释放连接 if (response == null) { try { response.close(); } catch (IOException e) { e.printStackTrace(); } } } return responseVo; } /** * 校验、转换参数 */ public static Set<Map.Entry<String, String>> covertParam(String params) throws Exception { String[] paramses; if (params.contains("=") && params.contains("&")) { paramses = params.split("&"); } else if (params.contains("=") && !params.contains("&")) { paramses = new String[1]; paramses[0] = params; } else { throw new Exception("参数请确保都为键值对形式"); } Map<String, String> map = new HashMap<>(); for (String s : paramses) { String[] ss = s.split("="); map.put(ss[0], s.substring(ss[0].length() + 1)); } return map.entrySet(); } } /** * 响应结果实体类 */ class ResponseVo { private String responseStr; private CloseableHttpResponse response; public ResponseVo(String responseStr, CloseableHttpResponse response) { this.responseStr = responseStr; this.response = response; } public ResponseVo() { } public String getResponseStr() { return responseStr; } public ResponseVo setResponseStr(String responseStr) { this.responseStr = responseStr; return this; } public CloseableHttpResponse getResponse() { return response; } public ResponseVo setResponse(CloseableHttpResponse response) { this.response = response; return this; } }
以下是非Maven版,即导jar包的版本,可以用cmd启动,试用期请编辑cmd文件中内容,另附源码:
链接:https://pan.baidu.com/s/1mqWEYzYrxBYVqxrq-wON3g
提取码:fq91
复制这段内容后打开百度网盘手机App,操作更方便哦
留言评论
暂无留言