Java模拟HTTP Get Post请求实现论坛自动回帖功能_java

最近想自动发帖回帖,拿某论坛试验了一下,发现可行,不过后续没有再使用,以免影响论坛正常运行。

1、帖子链接的格式为
http://bbs.***.***.**/forum.php?mod=viewthread&tid=774210

最后面774210数字变化, 就可以得到不同的帖子

2、防止帖子发表会又被删了的情况, 进行判断帖子是否存在

3、递增后面的 id 数字, 对每个链接做回帖的 POST 请求

重难点

回帖需要用户登录信息
一种是利用Cookie
另一种是进行模拟登录

本文采用前者

判断 url 对应的帖子是否存在
有可能用户发了帖子,比如 url 为 http://bbs.***.***.**/forum.php?mod=viewthread&tid=774200

后来该帖子用户删除了或者被管理员删除了,虽然帖子不在了,但是该 tid=774200 还是存在的

public static boolean isExist(int id) {
 String tmpPath = baseRefer + id;
 URL url;
 try {
 url = new URL(tmpPath);
 HttpURLConnection con = (HttpURLConnection) url.openConnection();
 con.addRequestProperty("Content-Type", "text/html; charset=UTF-8");
 con.addRequestProperty(
  "User-Agent",
  "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.104 Safari/537.36");
 con.addRequestProperty("Referer", "http://t.dianping.com/register");
 con.setRequestMethod("GET");
 if (con.getResponseCode() == 200) {
  InputStream inputStr = con.getInputStream();
  String info = new String(StreamTool.read(inputStr), "UTF-8");
  if (info.contains("抱歉,指定的主题不存在或已被删除或正在被审核")) {
  System.out.println("id=" + id + "帖子存在或已被删除!");
  return false;
  }
 }
 } catch (MalformedURLException e) {
 // TODO Auto-generated catch block
 e.printStackTrace();
 } catch (IOException e) {
 // TODO Auto-generated catch block
 e.printStackTrace();
 } catch (Exception e) {
 // TODO Auto-generated catch block
 e.printStackTrace();
 }
 return true;
}

模拟发帖
代码比较简单,注意事项是找到自己的Cookie,赋给String yourCookeie

用post发送一个回帖,回帖信息在 mapData.put("message", "友情帮顶了") 中

private static final String baseRefer = "http://bbs.**.**.**/forum.php?mod=viewthread&tid=";
private static final String yourCookeie = "Q8qA_2132_saltkey=**; Q8qA_2132_lastvisit=****3699;";
public static void main(String[] args) {
 int startId = 774210; // you need change
 for (int i = 0; i < 100; i++) {
 postMessage(startId);
 startId++;
 }
}
public static void postMessage(int id) {
 if (!isExist(id)) {
 return;
 }
 String tmpPath = baseRefer + id;
 StringBuilder path = new StringBuilder(tmpPath);
 Map<String, String> mapData = new LinkedHashMap<String, String>();
 mapData.put("mod", "post");
 mapData.put("action", "reply");
 mapData.put("replysubmit", "yes");
 mapData.put("infloat", "yes");
 mapData.put("handlekey", "fastpost");
 mapData.put("inajax", "1");
 mapData.put("message", "友情帮顶了");
 mapData.put("formhash", "86ec5d81");
 try {
 for (Map.Entry<String, String> mapEnt : mapData.entrySet()) {
  path.append("&");
  path.append(mapEnt.getKey() + "=");
  path.append(URLEncoder.encode(mapEnt.getValue(), "UTF-8"));
 }
 URL url = new URL(path.toString());
 HttpURLConnection con = (HttpURLConnection) url.openConnection();
 con.setRequestMethod("POST");
 con.setRequestProperty("Content-Type",
  "application/x-www-form-urlencoded");
 con.setRequestProperty("Content-Length",
  String.valueOf(path.length()));
 con.setRequestProperty(
  "User-Agent",
  "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.104 Safari/537.36");
 con.setRequestProperty("Cookie", yourCookeie);
 con.setDoOutput(true);
 OutputStream outStr = con.getOutputStream();
 outStr.write(path.toString().getBytes());
 if (con.getResponseCode() == 200) {
  InputStream inputStr = con.getInputStream();
  String info = new String(StreamTool.read(inputStr), "UTF-8");
  System.out.println("在id=" + id + "成功发帖!");
  try {
  Thread.sleep(20 * 1000);
  } catch (InterruptedException e) {
  // TODO Auto-generated catch block
  e.printStackTrace();
  }
 }
 } catch (UnsupportedEncodingException e) {
 // TODO Auto-generated catch block
 e.printStackTrace();
 } catch (MalformedURLException e) {
 // TODO Auto-generated catch block
 e.printStackTrace();
 } catch (IOException e) {
 // TODO Auto-generated catch block
 e.printStackTrace();
 } catch (Exception e) {
 // TODO Auto-generated catch block
 e.printStackTrace();
 }
}

还有一个工具方法,将输入流转化为字节

class StreamTool {
 public static byte[] read(InputStream inputStr) throws Exception {
 ByteArrayOutputStream outStr = new ByteArrayOutputStream();
 // TODO Auto-generated method stub
 byte[] buffer = new byte[1024];
 int len = 0;
 while ((len = inputStr.read(buffer)) != -1) {
  outStr.write(buffer, 0, len);
 }
 inputStr.close();
 return outStr.toByteArray();
 }
}

效果图:

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索java
, post
, http
, get
论坛自动回帖
restful实现post请求、java实现post请求、java实现接收post请求、c语言实现post请求、js实现post请求,以便于您获取更多的相关知识。

时间: 2024-09-14 05:38:37

Java模拟HTTP Get Post请求实现论坛自动回帖功能_java的相关文章

Java模拟HTTP Get Post请求 轻松实现校园BBS自动回帖_java

本文实例为大家分享了Java模拟HTTP Get Post请求,校园BBS自动回帖功能,供大家参考,具体内容如下 设计思路 找到帖子链接的集合,最后面数字变化, 就可以得到不同的帖子 防止帖子发表会又被删了的情况, 进行判断帖子是否存在 遍历这个集合, 对每个链接做回帖的POST请求 重难点 Note: 回帖需要用户登录信息 一种是利用Cookie 另一种是进行模拟登录 本文采用前者 代码 代码比较简单,注意事项是找到自己的Cookie,赋给String yourCookeie就可以直接运行 主

弄了一个论坛自动回帖的东西,怎么没效果,是不是缺了什么?

问题描述 参考网上找的一些代码,然后自己改了一下,论坛地址是http://www.scz-bbs.com/forum.php,想弄个自动顶贴的玩意,功能实现不了贴上我的代码,怎么就是没效果,我看了一下我运行一下浏览器上也没有cookie,用户名密码都在里面,大家帮忙看看哪里出问题了packagecom.fql.post;importjava.io.BufferedReader;importjava.io.InputStream;importjava.io.InputStreamReader;im

webbrowser控制天涯论坛自动回帖

问题描述 在源代码中没有"ID"值的情况下,怎么用webbrowser中的type操作网页空间呢,求大神指教

Java模拟HTTP请求如何获取请求页面中ajax方法的返回值

问题描述 Java模拟HTTP请求如何获取请求页面中ajax方法的返回值 我有一个AAA.JSP页面是通过加载百度的地图API的JS文件,再调用其中的ajax请求方法获取地理坐标.地理坐标在该ajax方法的返回参数中的.我现在需要在服务器端获取地理位置信息,因此我通过java程序模拟HTTP请求,去访问AAA.JSP,但因为ajax是异步的,模拟程序访问该页面的时候,其中的ajax方法还没执行结束,服务器就返回了该页面的静态HTML内容,导致我无法获取地理位置信息.请问如何让服务器端在ajax执

Java模拟登录正方教务抓取成绩、课表、空教室_java

本文实例为大家分享了Java模拟登录正方教务抓取成绩.课表.空教室等信息,供大家参考,具体内容如下 1.Jwgl.java package com.ican.yueban.jwgl; import java.io.IOException; import java.io.InputStream; import java.util.ArrayList; import java.util.List; import java.util.Scanner; import org.apache.http.Ht

Java模拟新浪和腾讯自动登录并发送微博_java

Java模拟新浪和腾讯自动登录并发送微博功能分享给大家,供大家参考,具体内容如下 1.准备工作只是登录无需申请新浪和腾迅的开发者账号,如果需要发送微博功能,需要申请一个新浪和腾迅的开发者账号,并添加一个测试应用.  过程请参考官方帮助文档,申请地址:新浪:http://open.weibo.com    腾迅:http://dev.t.qq.com/  我们需要的是App Key和App Secre及redirect_URI,源代码中已经包含了我申请的测试key,但由于限制直接用我的key你们的

java scoket http请求-求教:java socket编程接受HTTP请求出问题

问题描述 求教:java socket编程接受HTTP请求出问题 自己用Java scoket模拟编写接受http请求服务器,在浏览器中输入1次url地址,浏览器却会向服务器发送多次相同请求,这是什么原因? 以下是eclipse控制台打印的结果,可以看到浏览器发送了多次 /1234567890 请求,浏览器中地址栏只输入1次 http://localhost:8080/1234567890 eclipse控制台打印的结果: 初始化线程池,线程池中拥有10个线程可使用 初始化 base-param

php自定义类fsocket模拟post或get请求的方法_php技巧

本文实例讲述了php自定义类fsocket模拟post或get请求的方法.分享给大家供大家参考.具体如下: zsocket.class.php文件如下: <?php class ZSocket { /* * Init */ private function _fsockopen($host, $port, &$errno, &$errstr, $timeout){ $ip = @gethostbyname($host); $s = @socket_create(AF_INET, SO

java模拟cookie登陆操作_java

在使用java访问URL时,如果该URL需要身份验证,那么就不能够直接访问,因为没有登陆.那么,如何解决这个问题呢? 方法是使用java模拟登陆,登陆后记录下cookie信息,在下次发起请求时时将cookie发送过去用以表明身份,这样就能够访问带有权限的URL了. 下面首先介绍使用java模拟登陆.  // 连接地址(通过阅读html源代码获得,即为登陆表单提交的URL) String surl = "http://login.goodjobs.cn/index.php/action/UserL