import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.UnsupportedEncodingException;
import org.apache.commons.httpclient.Header;
import org.apache.commons.httpclient.HostConfiguration;
import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.HttpException;
import org.apache.commons.httpclient.HttpMethodBase;
import org.apache.commons.httpclient.HttpStatus;
import org.apache.commons.httpclient.URI;
import org.apache.commons.httpclient.URIException;
import org.apache.commons.httpclient.methods.GetMethod;
public class MyProxy {
private HttpClient client;
private HttpMethodBase method;
private byte[] binaryData;
private Header[] headers; // 响应头信息
public MyProxy() {
this.client = new HttpClient(); // 创建一个HttpClient实例
}
// 配置客户端请求参数
public void config(String proxyHost, int proxyPort, String url) throws URIException, NullPointerException {
this.method = new GetMethod();
HostConfiguration hostConfiguration = new HostConfiguration();
URI uri = new URI(url, true);
hostConfiguration.setHost(uri);
this.client.setHostConfiguration(hostConfiguration);
this.client.getHostConfiguration().setProxy(proxyHost, proxyPort); // 配置代理IP和端口
}
public void execute() throws HttpException, IOException { // 执行请求
int status = this.client.executeMethod(this.method);
if(status == HttpStatus.SC_OK) {
this.headers = this.method.getResponseHeaders();
InputStream stream = this.method.getResponseBodyAsStream();
if(stream != null) {
ByteArrayOutputStream data = new ByteArrayOutputStream();
int readCount = 0;
byte[] buffer = new byte[512];
while((readCount=stream.read(buffer))>0) {
data.write(buffer);
}
this.binaryData = data.toByteArray();
}
}
}
private void printResponseHeaders() { // 打印响应头信息
for(Header header : this.headers) {
System.out.println(header.getName() + " : " + header.getValue());
}
}
private void printStringData(String encoding) throws UnsupportedEncodingException { // 简单编码并打印响应字符串数据
if(encoding == null) {
encoding = "utf-8";
}
String data = new String(this.binaryData, encoding);
System.out.println(data);
}
public static void main(String[] args) throws Exception
{
System.setProperty( "org.apache.commons.logging.Log", "org.apache.commons.logging.impl.NoOpLog" );
String url = "http://www.163.com"; // 无法通过浏览直接器访问,你可以找到一个需要使用代理访问的网站
MyProxy mp = new MyProxy();
String proxyHost = "72.36.112.71";
int proxyPort = 3124;
mp.config(proxyHost, proxyPort, url);
mp.execute();
mp.printStringData(null);
mp.printResponseHeaders();
}
}
httpclient 代理访问
最新推荐文章于 2024-05-29 17:52:30 发布