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

时间:2021-05-05 16:58:06

首先创建一下代理的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 stub

return 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 block
e.printStackTrace();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.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;
}
}