JAVA 动态替换代理IP并模拟POST请求

来源:互联网 发布:5233软件下载 编辑:程序博客网 时间:2024/05/20 01:43

首先创建一下代理的IP和端口

package postTest;import java.util.List;/** *  * 获取代理信息 *  * */public class ProxyInfo {String proxyIP = null;String proxyPort = null;    public String getProxyIP() {return proxyIP;}public void setProxyIP(String proxyIP) {this.proxyIP = proxyIP;}public String getProxyPort() {return proxyPort;}public void setProxyPort(String proxyPort) {this.proxyPort = proxyPort;}public static List<ProxyInfo> arrayList() {// TODO Auto-generated method stubreturn null;}}
然后从文件中读入代理IP和端口列表,以空格分割

package postTest;import java.io.BufferedReader;import java.io.File;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.IOException;import java.io.InputStreamReader;import java.io.UnsupportedEncodingException;import java.util.ArrayList;public class ReadFile {/** *读取TXT文件中的代理配置文件 *1、获得文件句柄 *2、 获得的句柄当作一个字节码流,对输入的码流进行读取 *读取到输入流之后,需要读取生成字节流 * 逐行输出 * 考虑到异常情况 * */public static ArrayList<ProxyInfo> readFile(String filePath){String encoding = "UTF-8";File file = new File(filePath);ProxyInfo proxys = new ProxyInfo();ArrayList<ProxyInfo> infos = new ArrayList<ProxyInfo>();if(file.isFile() && file.exists()){//判断文件是否存在try {InputStreamReader read = new InputStreamReader(new FileInputStream(file), encoding);//编码格式BufferedReader bufferedReader = new BufferedReader(read);String textLine = null;for(int i = 0; (textLine = bufferedReader.readLine()) != null; i++){String[] proxyInfo = textLine.split(" ");proxys.setProxyIP(proxyInfo[0]);proxys.setProxyPort(proxyInfo[1]);infos.add(proxys);//System.out.println(((ProxyInfo) infos.get(i)).getProxyIP());//System.out.println(((ProxyInfo) infos.get(i)).getProxyPort());}} catch (UnsupportedEncodingException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (FileNotFoundException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (IOException e){e.printStackTrace();}}else{System.out.println("Can not find the Proxy File");}return infos;}/*public static void main(String[] args){readFile("D:/proxy.txt");} */}

然后,将读入的IP列表设置为代理

package postTest;import postTest.*;import org.apache.log4j.*;import java.io.*;import java.net.*;import java.util.*;public class TestPost {  private static final Logger log = Logger.getLogger(TestPost.class);    public static void TestPost() throws IOException {      /*ProxyInfo proxyInfo = new ProxyInfo();    String proxyIP = proxyInfo.getProxyIP();        int proxyPort = proxyInfo.getProxyPort();*/        //ReadFile.readFile("");    ArrayList<ProxyInfo> abc = ReadFile.readFile("D:/proxy.txt");        URL url = new URL("http://vote.sinabz.com/index.php?c=Index&a=tp");          for(int i = 0; i < 1; i++ ){        //Proxy proxy = new Proxy(Proxy.Type.DIRECT.HTTP, new InetSocketAddress("127.0.0.1", 8087));        System.getProperty("http.maxRedirects", "50");        System.getProperties().setProperty("proxySet", "true");        System.out.println("此时的代理服务器设置为" + abc.get(i).getProxyIP()        + "端口号设置为" + abc.get(i).getProxyPort());        URLConnection connection = url.openConnection();         connection.setRequestProperty(//设置终端类型        "User-Agent",        "Mozilla/4.0 (compatible; MSIE 7.0; NT 5.1; GTB5; .NET CLR 2.0.50727; CIBA)"        );          System.getProperties().setProperty("http.proxyHost", abc.get(i).getProxyIP());        System.getProperties().setProperty("http.proxyPort", abc.get(i).getProxyPort());                    connection.setDoOutput(true);              OutputStreamWriter out = new OutputStreamWriter(connection.getOutputStream(), "UTF-8");              out.write("id=19&submit="); // 向页面传递数据。post的关键所在!              out.flush();              out.close();              // 一旦发送成功,用以下方法就可以得到服务器的回应:              String sCurrentLine;              String sTotalString;              sCurrentLine = "";              sTotalString = "";              InputStream l_urlStream;              l_urlStream = connection.getInputStream();              // 传说中的三层包装阿!              BufferedReader l_reader = new BufferedReader(new InputStreamReader(                      l_urlStream));              while ((sCurrentLine = l_reader.readLine()) != null) {                  sTotalString += sCurrentLine + "\r\n";                    }              System.out.println(sTotalString);          log.info(getHtml("http://www.ip138.com/ips138.asp?"));          }      }    public static void main(String[] args) throws IOException {      //System.setProperties("");    //System.setProperty("", "");        TestPost();      }  /****************下面是从IP138获取一下是否正确设置了代理服务器**************/private static String getHtml(String address){          StringBuffer html = new StringBuffer();          String result = null;          try{              URL url = new URL(address);              URLConnection conn = url.openConnection();              conn.setRequestProperty("User-Agent","Mozilla/4.0 (compatible; MSIE 7.0; NT 5.1; GTB5; .NET CLR 2.0.50727; CIBA)");              BufferedInputStream in = new BufferedInputStream(conn.getInputStream());                            try{                  String inputLine;                  byte[] buf = new byte[4096];                  int bytesRead = 0;                  while (bytesRead >= 0) {                      inputLine = new String(buf, 0, bytesRead, "ISO-8859-1");                      html.append(inputLine);                      bytesRead = in.read(buf);                      inputLine = null;                  }                  buf = null;              }finally{                  in.close();                  conn = null;                  url = null;              }              result = new String(html.toString().trim().getBytes("ISO-8859-1"), "gb2312").toLowerCase();                        }catch (Exception e) {              e.printStackTrace();              return null;          }finally{              html = null;                      }          System.out.println(result);        return result;      }  }    


0 0
原创粉丝点击