เมื่อเร็ว ๆ นี้ฉันต้องการโพสต์โดยอัตโนมัติและตอบกลับโดยอัตโนมัติ ฉันลองใช้ฟอรัมและพบว่ามันเป็นไปได้ แต่มันไม่ได้ใช้อีกครั้งในอนาคตเพื่อหลีกเลี่ยงการส่งผลกระทบต่อการทำงานปกติของฟอรัม
1. รูปแบบของลิงค์โพสต์คือ
http: //bbs.*******.**/forum.php? mod = viewThread & tid = 774210
จำนวนการเปลี่ยนแปลงในตอนท้ายของ 774210 สามารถรับได้โดยการโพสต์ที่แตกต่างกัน
2. ป้องกันไม่ให้โพสต์ถูกลบอีกครั้งและตรวจสอบว่ามีโพสต์อยู่หรือไม่
3. เพิ่มหมายเลขรหัสหลังจากนั้นและทำการร้องขอโพสต์เพื่อตอบกลับแต่ละลิงก์
ประเด็นสำคัญ
การตอบกลับต้องใช้ข้อมูลการเข้าสู่ระบบของผู้ใช้หนึ่งคือการใช้คุกกี้
อีกวิธีหนึ่งคือการจำลองการเข้าสู่ระบบ
บทความนี้ใช้อดีต
ตรวจสอบว่ามีโพสต์ที่สอดคล้องกันของ URL อยู่หรือไม่
เป็นไปได้ว่าผู้ใช้ได้โพสต์โพสต์ตัวอย่างเช่น URL คือ http: //bbs.******.**/forum.php? mod = viewThread & tid = 774200
ต่อมาผู้ใช้ของโพสต์ถูกลบหรือลบโดยผู้ดูแลระบบ แม้ว่าโพสต์จะหายไป TID = 774200 ยังคงมีอยู่
Public Static Boolean isExist (int id) {string tmppath = baserefer + id; URL URL; ลอง {url = url ใหม่ (tmppath); httpurlConnection con = (httpurlconnection) url.openconnection (); con.addrequestProperty ("เนื้อหาประเภท", "ข้อความ/html; charset = utf-8"); Con.addrequestProperty ("ผู้ใช้ตัวแทน", "Mozilla/5.0 (Windows NT 6.1) Applewebkit/537.36 (khtml, เช่น Gecko) Chrome/38.0.2125.104 Safari/537.36"); Con.addrequestProperty ("ผู้อ้างอิง", "http://t.dianping.com/register"); con.setRequestMethod ("รับ"); if (con.getResponsEcode () == 200) {inputStream inputStRe = con.getInputStream (); สตริงข้อมูล = สตริงใหม่ (streamtool.read (inputstr), "utf-8"); ถ้า (info.contains ("ขออภัยหัวข้อที่ระบุไม่มีอยู่หรือถูกลบหรือถูกตรวจสอบ")) {system.out.println ("id =" + id + "โพสต์หรือถูกลบ!"); กลับเท็จ; }}} catch (malformedurlexception e) {// todo บล็อก catch block ที่สร้างขึ้นอัตโนมัติ e.printstacktrace (); } catch (ioexception e) {// todo บล็อก catch block ที่สร้างอัตโนมัติ e.printstacktrace (); } catch (exception e) {// todo บล็อก catch block ที่สร้างอัตโนมัติ e.printstacktrace (); } catch (exception e) {// todo บล็อก catch block ที่สร้างอัตโนมัติ e.printstacktrace (); } catch (exception e) {// todo บล็อก catch block ที่สร้างอัตโนมัติ e.printstacktrace (); } catch (exception e) {// todo บล็อก catch block ที่สร้างอัตโนมัติ e.printstacktrace (); } return true;}จำลองการโพสต์ <br /> รหัสค่อนข้างง่ายข้อควรระวังคือการหาคุกกี้ของคุณเองและกำหนดให้สตริงของคุณ
ส่งการตอบกลับโดยใช้โพสต์และข้อความตอบกลับอยู่ใน mapdata.put ("ข้อความ", "friendship help")
สตริงสุดท้ายคงที่ส่วนตัว baseRefer = "http: //bbs.**.**.**/forum.php? mod = viewThread & tid ="; สตริงสุดท้ายคงที่ส่วนตัว yourcookie = "q8qa_2132_saltkey = **; q8qa_2132_lastvisit = *** 774210; // คุณต้องการการเปลี่ยนแปลงสำหรับ (int i = 0; i <100; i ++) {postmessage (startId); startId ++; }} โมฆะคงที่สาธารณะ postmessage (int id) {if (! isexist (id)) {return; } สตริง tmppath = baserefer + id; path StringBuilder = new StringBuilder (TMPPATH); แผนที่ <สตริง, สตริง> mapData = ใหม่ linkedHashMap <สตริง, สตริง> (); mapData.put ("mod", "post"); mapData.put ("การกระทำ", "ตอบกลับ"); mapdata.put ("Replysubmit", "ใช่"); mapdata.put ("infoat", "ใช่"); mapData.put ("handlekey", "fastpost"); mapdata.put ("inajax", "1"); mapData.put ("ข้อความ", "การสนับสนุนมิตรภาพ"); MapData.put ("FormHash", "86EC5D81"); ลอง {สำหรับ (map.entry <string, string> mapent: mapdata.entryset ()) {path.append ("&"); path.append (mapent.getKey () + "="); path.append (urlencoder.encode (mapent.getValue (), "UTF-8")); } url url = url ใหม่ (path.toString ()); httpurlConnection con = (httpurlconnection) url.openconnection (); con.setRequestMethod ("โพสต์"); Con.setRequestProperty ("ประเภทเนื้อหา", "แอปพลิเคชัน/X-WWW-FORM-URLENCODED"); con.setRequestProperty ("ความยาวเนื้อหา", string.valueof (path.length ())); Con.setRequestProperty ("ผู้ใช้ตัวแทน", "Mozilla/5.0 (Windows NT 6.1) Applewebkit/537.36 (khtml, เช่น Gecko) Chrome/38.0.2125.104 Safari/537.36"); Con.setRequestProperty ("คุกกี้", YourCookie); Con.setDoOutput (จริง); OutputStream Outstr = Con.getOutputStream (); Outstr.Write (path.toString (). getBytes ()); if (con.getResponsecode () == 200) {inputStream inputStRe = con.getInputStream (); สตริงข้อมูล = สตริงใหม่ (streamtool.read (inputstr), "utf-8"); System.out.println ("ส่งสำเร็จใน id =" + id + "!"); ลอง {thread.sleep (20 * 1000); } catch (interruptedException e) {// toDo บล็อก catch block ที่สร้างขึ้นอัตโนมัติ E.PrintStackTrace (); }} catch (unsupportencodingexception e) {// toDo บล็อก catch ที่สร้างโดยอัตโนมัติ E.PrintStackTrace (); } catch (malformedurlexception e) {// todo บล็อก catch block ที่สร้างขึ้นอัตโนมัติ e.printstacktrace (); } catch (ioexception e) {// todo บล็อก catch block ที่สร้างอัตโนมัติ e.printstacktrace (); } catch (exception e) {// todo บล็อก catch block ที่สร้างอัตโนมัติ e.printstacktrace (); - นอกจากนี้ยังมีวิธีการเครื่องมือที่แปลงกระแสอินพุตเป็นไบต์
คลาส StreamTool {Public Static Byte [] Read (InputStream InputStrem) พ่นข้อยกเว้น {ByTeArrayOutputStream Outstr = New ByTeArrayOutputStream (); // todo วิธีการที่สร้างอัตโนมัติ byte byte [] buffer = byte ใหม่ [1024]; int len = 0; ในขณะที่ ((len = inputstr.read (บัฟเฟอร์))! = -1) {outstr.write (บัฟเฟอร์, 0, len); } inputstr.close (); return outstr.tobytearray (); -ภาพการทำซ้ำ:
ข้างต้นเป็นเนื้อหาทั้งหมดของบทความนี้ ฉันหวังว่ามันจะเป็นประโยชน์ต่อการเรียนรู้ของทุกคนและฉันหวังว่าทุกคนจะสนับสนุน wulin.com มากขึ้น