httpclient 代理访问



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();
}

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值