Use multithreading, curl, and proxy IP to simulate post submission and get access in Java
Rookie, multi-threaded fun on the writing to play, the great God can pass advice, brother in this teachable, thank you!
/** * @ Component Name: Javademo * @ Package Name: Javademo * @ file name: Jenny.java * @ created: August 1, 2014 5:53:48 * @ Copyright information: copyright©2014 eelly Co.Ltd, small Aunt son all rights reserved. */package javademo;import java.io.bufferedreader;import Java.io.file;import java.io.filewriter;import Java.io.ioexception;import Java.io.inputstreamreader;import Java.io.printwriter;import Java.io.Writer;import Java.net.url;import java.net.urlconnection;import java.util.list;import Java.util.map;import java.util.Random;/** * Used for exception throwing but defined because Exception cannot be thrown, only subclasses can */class MyException extends Exception {private static final long Serialversionuid = -1485825968429580934l; Public MyException () {super (); } public MyException (String msg) {super (MSG); } public MyException (String msg, throwable cause) {super (MSG, cause); } public MyException (Throwable cause) {super (cause); }}/** * A sister-in-Need thread class */class Shimengren implements Runnable {/** * pageviews link */private String URL = "Http://ww W.shimengren.com/artIcle/yj/views.jhtml "; /** * Likes the link */private String Urlzan = "http://www.shimengren.com/article/yj/ups.jhtml"; /** * Travel's ID */private String param = "article_id=10844"; /** * Multi-threaded Shared global variable *//private volatile Boolean flag = true; /** * The number of threads that enter the post submission at the same time */private static final int max_thread_count = 25; /** * The counter of the number of threads that enter the post submission at the same time */private volatile int threadnum = 0; /** * * Count */private static int num = 0; /** * Browse times */private static int view = 0; /** * Proxy IP */private string[] ProxyArray = {"127.0.0.1:8787", "115.239.210.199:80", "149.255.255.242:80", "124.172.242.175:80", "117.59.217.243:80", "183.234.59.89:18186", "117.59.217.236:80", "183.224.1.56:80 "," 120.202.249.230:80 "," 125.46.100.198:9999 "," 112.65.19.122:8080 "," 202.96.172.234:808 "," 183.224.1.114:80 ", "183.224.1.113:80", "222.66.115.229:80"}; public void Setflag (Boolean Flag) {//This.flag = flag; }///public Boolean Getflag () {//return this.flag; }///public void Stop () {//This.setflag (FALSE); }///public void Start () {//This.setflag (TRUE); } public void setnum (int num) {shimengren.num = num; } public int Getnum () {return shimengren.num; } public void Setthreadnum (int threadnum) {shimengren.threadnum = Threadnum; } public int Getthreadnum () {return shimengren.threadnum; } public int GetView () {return shimengren.view; }/** * @ Method Name: GetProxy * Description: Random get proxy IP * @ Creator: <a Href=mailto: [email protected]> sister-in-law </a> * @ Modified By: * @ Modified: August 18, 2014 9:23:36 * @return * @ return value: string[] * @ Exception Description: */public string[] Getpr Oxy () {string[] strlist = null; int len = proxyarray.length-1; int num = 0; if (0 < len) {num = new Random (). NEXTInt (len); } String proxy = This.proxyarray[num]; if (Proxy! = "") {strlist = Proxy.split (":"); } return strlist; }/** * @ Method Name: Sendget * Description: A request to send a GET method to a specified URL * @ Creator: <a Href=mailto: [email protected]> sister-in-law </ A> * @ Modified By: * @ Modified: August 18, 2014 morning 9:26:27 * @param URL * Send request URL * @param param * Request parameters, request parameters should be in the form of name1=value1&name2=value2. * The response result of the remote resource represented by the @return URL * @ return Value: String * @ Exception Description: */public string Sendget (string URL, string param) { String result = ""; BufferedReader in = null; string[] proxylist = This.getproxy (); if (null! = proxylist) {system.setproperty ("Http.proxyset", "true"); System.setproperty ("Http.proxyhost", proxylist[0]); System.setproperty ("Http.proxyport", proxylist[1]); } try {String urlnamestring = URL + "?" + param; URL RealuRL = new URL (urlnamestring); The connection between open and URL urlconnection connection = Realurl.openconnection (); Set the generic request attribute Connection.setrequestproperty ("accept", "*/*"); Connection.setrequestproperty ("Connection", "keep-alive"); Connection.setrequestproperty ("User-agent", "mozilla/4.0" (compatible; MSIE 6.0; Windows NT 5.1; SV1) "); Establish the actual connection connection.connect (); Get all response header fields Map<string, list<string>> Map = Connection.getheaderfields (); Traverse all response header fields for (String Key:map.keySet ()) {System.out.println (key + "--->" + map.get (key )); }//define BufferedReader input stream to read the response of the URL in = new BufferedReader (New InputStreamReader (connection.getinput Stream ())); String Line; while (line = In.readline ()) = null) {result + = line; }} catch (Exception e){System.out.println ("Send GET request exception! "+ e); E.printstacktrace (); }//Use finally block to close the input stream finally {try {if (in! = null) {In.clos E (); }} catch (Exception E2) {e2.printstacktrace (); }} return result; }/** * @ Method Name: Sendpost * Description: A request to send a POST method to a specified URL * @ Creator: <a Href=mailto: [email protected]> 's brother-in-law & Lt;/a> * @ Modified By: * @ Modified: August 18, 2014 morning 9:29:09 * @param URL * Send request URL * @param param * Request parameters, request parameters should be in the form of name1=value1&name2=value2. * The response result of the remote resource represented by the @return * @throws Exception * @ return Value: String * @ Exception Description: */public string sendpost (string URL, String param) throws Exception {printwriter out = null; BufferedReader in = null; String result = ""; string[] proxylist = This.getproxy (); if (null! = proxylist) {System.setproperty ("Http.proxyset", "true"); System.setproperty ("Http.proxyhost", proxylist[0]); System.setproperty ("Http.proxyport", proxylist[1]); } try {url realurl = new URL (URL); The connection between open and URL URLConnection conn = realurl.openconnection (); Set the generic request attribute Conn.setrequestproperty ("accept", "*/*"); Conn.setrequestproperty ("Connection", "keep-alive"); Conn.setrequestproperty ("User-agent", "mozilla/4.0" (compatible; MSIE 6.0; Windows NT 5.1; SV1) "); The Send POST request must be set to the following two lines conn.setdooutput (true); Conn.setdoinput (TRUE); Gets the output stream corresponding to the URLConnection object out = new PrintWriter (Conn.getoutputstream ()); Send request parameter out.print (param); Flush output Stream Buffer Out.flush (); Defines the BufferedReader input stream to read the response of the URL in = new BufferedReader (New InputStreamReader (Conn.getinputstream ())); String Line; while (line = In.readline ()) = null) {result + = line; }} catch (Exception e) {throw new MyException ("Send POST request exception! "+ e); SYSTEM.OUT.PRINTLN ("Send POST request exception!") "+ e); E.printstacktrace (); }//Use finally block to close the output stream, input stream finally {try {if (out! = null) {OU T.close (); } if (in = null) {in.close (); }} catch (IOException ex) {throw new MyException ("Send POST request exception! "+ ex"); Ex.printstacktrace (); }} return result; }/** * @ Method Name: Plusnum * Description: Number of Bus path count * @ Creator: <a Href=mailto: [email protected]> sister-in-law </a> * @ Modified By: * @ Modified: August 18, 2014 9:29:53 * @ return value: void * @ Exception Description: */public void Plusnum () {Shimengren . num++; } /** *@ Method Name: Reductionnum * Description: Number of bus threads * @ Creator: <a Href=mailto: [email protected]> sister-in-law's brother-in-law </a> * Modified by: * @ Modified: August 18, 2014 9:30:03 * @ return value: void * @ Exception Description: */public void Reductionnum () {shimengren.num- -; Shimengren.num = Shimengren.num < 0? 0:shimengren.num; }/** * @ Method Name: Plusthreadnum * Description: Concurrent threads count (not actually concurrency), use synchronous identifiers to prevent multi-threaded interference * @ Creator: <a href=mailto: [email p Rotected]> 's brother-in-law </a> * Modified by: * @ Modified: August 18, 2014 9:30:22 * @ return value: void * @ Exception Description: */public s ynchronized void Plusthreadnum () {shimengren.threadnum++; }/** * @ Method Name: Reductionthreadnum * Description: Concurrent threads count (not actually concurrency), use synchronous identifiers to prevent multi-threaded interference * @ Creator: <a href=mailto: [EMAIL&N Bsp;protected]> 's brother-in-law </a> * Modified by: * @ Modified: August 18, 2014 9:30:28 * @ return value: void * @ Exception Description: */Pub Lic synchronized void Reductionthreadnum () {shimengren.threadnum--; Shimengren.threadnum = Shimengren.threadnuM < 0? 0:shimengren.threadnum; }/** * @ Method Name: Plusview * Description: Browse count, use sync identifier, prevent multi-threaded interference * @ Creator: <a href=mailto: [email protected]> Brother-in-law </a> * @ Modified By: * @ Modified: August 18, 2014 9:30:33 * @ return value: void * @ Exception Description: */public synchronized void Plusview () {shimengren.view++; }/** * @ Method Name: Runshimengren * Description: Call Sendpost method, and various counts * @ Creator: <a href=mailto: [email protected]> Small Aunt's brother-in-law </a> * Modified by: * @ Modified: August 18, 2014 a.m. 9:30:37 * @throws MyException * @throws interruptedexception * @ return value: void * @ Exception Description: */public void Runshimengren () throws MyException, interruptedexception {this. Plusnum (); try {thread.sleep (New Random (). Nextint (2000)); if (Shimengren.max_thread_count > This.getthreadnum ()) {this.plusthreadnum ();//Counter self-increment S Tring result = Sendpost (This.url, This.param); Brush views Sendpost (This.urlzan, THIS.PAram); Brush the number of likes if (Result.equals ("1")) {This.plusview (); This.jennylog ("Views:" + this.getview () + "\ n"); }}} catch (Exception e) {thread.sleep (2000); throw new MyException ("site exception, stop all Threads."); } finally {System.out.println ("Waiting to execute thread queue:" + this.getnum () + ", current number of async threads:" + this.getthreadnum () + ", Views:" + This.getview ()); This.reductionnum (); This.reductionthreadnum (); }}/** * @ Method Name: Jennylog * Description: Sister-in-the-diary, only to see the changes in the number of views * @ Creator: <a href=mailto: [email protected]> Brother-in-law </a> * @ Modified By: * @ Modified: August 18, 2014 9:30:52 * @param data * @throws IOException * @ return value: void * @ Exception Description: */public void Jennylog (String data) throws IOException {File File = new file ("/home/beyond/tmp/j Enny.log.txt "); File File = new file ("E:\\jenny.log.txt"); if (!filE.getparentfile (). exists ()) {File.getparentfile (). Mkdirs (); } Writer out = new FileWriter (file); Out.write (data); Out.close (); }/** * <p> * Theme: Run * </p> * <p> * Description: Desperately in the dead post submission data * </p> * * @see Java.lang.runnable#run () */@Override public void Run () {for (;;) {try {this.runshimengren (); } catch (Exception e) {System.out.println ("send POST request exception."); }}}}/** * @ class Name: Jenny * Description: Sister-in-law class * @ Creator: <a Href=mailto: [email protected]> sister-in-law's brother-in-law </a> * Modified by: * @ Modified: August 1, 2014 5:53:48 * Modify Description:<br/> * @ Version information:v1.0.0<br/> */public class Jennythread {/** * @ Method Name: Mai N * Description: The main method of the sister-in-law * @ Creator: <a Href=mailto: [email protected]> 's sister-in-law </a> * Modified by: * @ Modified: 2014 August 1 Afternoon 5:53:48 * @param args * @throws Exception * @ return value: void * @ Exception Description: */ public static void Main (string[] args) {Runnable t = new Shimengren (); for (int i = 0; i <; i++) {New Thread (T, "thread-" + i). Start (); } }}