1、http代理
package main.java.com.example;
import org.apache.http.HttpHost;
import org.apache.http.client.fluent.*;
public class testproxy {
public static void main(String[] args) throws Exception {
HttpHost entry = new HttpHost("43.248.79.157", 54267);
String query = Executor.newInstance()
.auth(entry, "crnr98", "ae44equ3")
.execute(Request.Get("http://myip.ipip.net").viaProxy(entry))
.returnContent().asString();
System.out.println(query);
}
}
2、socks代理
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;
public class socksProxy
{
public static void main(String[] args) throws Exception
{
Proxy proxy = new Proxy(Proxy.Type.SOCKS, new InetSocketAddress("43.248.99.32", 50215));//设置socks代理服务器ip端口
System.out.println(proxy);
java.net.Authenticator.setDefault(new java.net.Authenticator()//socks代理要进行认证
{
private PasswordAuthentication authentication = new PasswordAuthentication("crnr98", "ae44equ3".toCharArray());//上送代理对应的账密
@Override
protected PasswordAuthentication getPasswordAuthentication()
{
return authentication;
}
});
//tcp方式
/*Socket client = new Socket(proxy);
client.connect(new InetSocketAddress("222.95.148.10", 8080));
System.out.println(client);
client.close();*/
//okhttp方式
OkHttpClient client = new OkHttpClient.Builder().connectTimeout(150, TimeUnit.SECONDS).proxy(proxy).build();//创建OkHttpClient,并且设置超时时间和代理
Request request = new Request.Builder().url("http://www.99bill.com").get().build();//查询本机ip地址请求
Response response = client.newCall(request).execute();
System.out.println(response.body().string());
CloseableHttpClient client = null;
HttpGet httpGet = new HttpGet(targetUrl);
client = getHttpClient(proxy);
CloseableHttpResponse response = getHttpClient.execute(httpGet);
String resultStr = EntityUtils.toString(response.getEntity(), StandardCharsets.UTF_8);
System.out.println("访问目标地址结果:"+resultStr);
}
3、http方式中走账密验证和不走账密验证
package main.java.com.example;
import java.io.IOException;
import java.net.InetSocketAddress;
import java.net.Proxy;
import java.nio.charset.StandardCharsets;
import org.apache.http.HttpHost;
import org.apache.http.auth.AuthScope;
import org.apache.http.auth.UsernamePasswordCredentials;
import org.apache.http.client.CredentialsProvider;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.BasicCredentialsProvider;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;
import okhttp3.Authenticator;
import okhttp3.Credentials;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;
import okhttp3.Route;
public final class Demo {
public static void main(String[] args) throws IOException {
String ip = "1.199.167.15"; // 代理主机地址
int port = 27320; // 代理主机端口
// 使用OKHttp库
// OKHttpProxy.build(ip, port).test();
//OKHttpProxy.build(ip, port, "9govbw", "gbqgn4a2").test(); // 代理认证
// 使用HttpClient库
//HttpClientProxy.build(ip, port).test();
HttpClientProxy.build(ip, port, "9govbw", "gbqgn4a2").test(); // 代理认证
}
/**
* OKHttp库使用代理
*/
static class OKHttpProxy {
String proxyHost;
int proxyPort;
String proxyAccount;
String proxyPwd;
/**
* @param host 代理主机地址
* @param port 代理主机端口
*/
public static OKHttpProxy build(String host, int port) {
OKHttpProxy proxy = new OKHttpProxy();
proxy.proxyHost = host;
proxy.proxyPort = port;
return proxy;
}
/**
* @param host 代理主机地址
* @param port 代理主机端口
* @param acc 代理认证账号
* @param pwd 代理认证口令
*/
public static OKHttpProxy build(String host, int port, String acc, String pwd) {
OKHttpProxy proxy = new OKHttpProxy();
proxy.proxyHost = host;
proxy.proxyPort = port;
proxy.proxyAccount = acc;
proxy.proxyPwd = pwd;
return proxy;
}
public void test() throws IOException {
String targetUrl = "http://myip.ipip.net";
OkHttpClient client = null;
if (proxyAccount == null || proxyPwd == null) {
client = getHttpClient(proxyHost, proxyPort);
} else {
// 账号密码验证
client = getHttpClient(proxyHost, proxyPort, proxyAccount, proxyPwd);
}
Request request = new Request.Builder()
.url(targetUrl)
.build();
Response response = client.newCall(request).execute();
System.out.println(response.body().string());
}
/**
* 代理不需要账号密码认证的httpClient
*/
private static OkHttpClient getHttpClient(String proxyHost, int proxyPort) {
Proxy proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress(proxyHost, proxyPort));
return new OkHttpClient.Builder()
.proxy(proxy)
.build();
}
/**
* 代理需要账号密码认证的httpClient
*/
private static OkHttpClient getHttpClient(String proxyHost, int proxyPort, final String acc, final String pwd) {
Proxy proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress(proxyHost, proxyPort));
// 账号密码验证
Authenticator authenticator = new Authenticator() {
public Request authenticate(Route route, Response resp) throws IOException {
String credential = Credentials.basic(acc, pwd);
return resp.request().newBuilder().header("Proxy-Authorization", credential).build();
}
};
return new OkHttpClient.Builder()
.proxy(proxy)
.proxyAuthenticator(authenticator)
.build();
}
}
/**
* HttpClient库使用代理
*/
static class HttpClientProxy {
String proxyHost;
int proxyPort;
String proxyAccount;
String proxyPwd;
/**
* @param host 代理主机地址
* @param port 代理主机端口
*/
public static HttpClientProxy build(String host, int port) {
HttpClientProxy proxy = new HttpClientProxy();
proxy.proxyHost = host;
proxy.proxyPort = port;
return proxy;
}
/**
* @param host 代理主机地址
* @param port 代理主机端口
* @param acc 代理认证账号
* @param pwd 代理认证口令
*/
public static HttpClientProxy build(String host, int port, String acc, String pwd) {
HttpClientProxy proxy = new HttpClientProxy();
proxy.proxyHost = host;
proxy.proxyPort = port;
proxy.proxyAccount = acc;
proxy.proxyPwd = pwd;
return proxy;
}
public void test() throws IOException {
String targetUrl = "http://myip.ipip.net";
CloseableHttpClient client = null;
if (proxyAccount == null || proxyPwd == null) {
client = getHttpClient(proxyHost, proxyPort);
} else {
// 账号密码验证
client = getHttpClient(proxyHost, proxyPort, proxyAccount, proxyPwd);
}
HttpGet httpGet = new HttpGet(targetUrl);
CloseableHttpResponse response = client.execute(httpGet);
String resultStr = EntityUtils.toString(response.getEntity(), StandardCharsets.UTF_8);
System.out.println(resultStr);
}
/**
* 代理不需要账号密码认证的httpClient
*/
private static CloseableHttpClient getHttpClient(String proxyHost, int proxyPort) {
HttpHost proxy = new HttpHost(proxyHost, proxyPort, "HTTP");
return HttpClients.custom()
.setProxy(proxy)
.build();
}
/**
* 代理需要账号密码认证的httpClient
*/
private static CloseableHttpClient getHttpClient(String proxyHost, int proxyPort, String acc, String pwd) {
HttpHost proxy = new HttpHost(proxyHost, proxyPort, "HTTP");
CredentialsProvider provider = new BasicCredentialsProvider();
provider.setCredentials(new AuthScope(proxy), new UsernamePasswordCredentials(acc, pwd));
return HttpClients.custom()
.setProxy(proxy)
.setDefaultCredentialsProvider(provider)
.build();
}
}
}
推荐一家好用的代理ip成功率挺高的:https://h.shenlongip.com/index?from=seller&did=h4Dmox