-
2016-05-17 10:23:43
java有两种方法可以设置代理ip,简单介绍一下优劣
第一种,直接在JVM中设置:
/*JVM设置代理*/ System.getProperties().setProperty("http.proxyHost", ip); System.getProperties().setProperty("http.proxyPort", "80");
这种设置的优势是快捷方便,且由于是JVM级别的设置,可以对整个项目起作用。当然这种设置方法有一个明显的劣势:当代理ip不可用时,会直接调用本地网络来进行连接。这个问题在很多使用场景中是非常致命的。
第二种,使用SocketAddress网络代理
/** * 通过代理对象连接 * @param address * @return */ SocketAddress addr = new InetSocketAddress(host, Integer.parseInt(port)); Proxy proxy = new Proxy(Proxy.Type.HTTP, addr); try{ URL url = new URL("http://www.baidu.com"); URLConnection conn = url.openConnection(proxy); conn.setConnectTimeout(5000); conn.setRequestProperty("User-Agent","Mozilla/4.0 (compatible; MSIE 7.0; NT 5.1; GTB5; .NET CLR 2.0.50727; CIBA)"); conn.getContent(); }catch (Exception e) { e.printStackTrace(); }
建立一个Proxy对象,然后使用这个对象来进行连接。当代理失效时,会直接抛出异常。这种办法的优势是,在代理连接发生错误时,会抛出异常而并不是使用本地的连接继续访问。而劣势也很明显,你需要为每一次连接创建一个代理对象。
最后是一个用于验证代理IP是否生效的抓取程序,抓取地址是:http://1212.ip138.com/ic.asp 可以直接看到访问的ip地址。需要注意的是,如果你使用的是透明代理,那么这个ip依然会显示为你的实际ip只有使用匿名代理时,该ip才会变成代理ip。
以下是抓取程序:
/** * 获得页面信息 * @param address * @return */ 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; } return result; }
更多相关内容 -
java使用proxy类设置代理ip
2015-11-17 14:47:25获取网络资源,使用动态代理ip解决单个ip访问次数限制问题 -
java动态设置IP
2015-04-02 00:44:31工作需要要写一个spider访问XXX网站,但是由于我访问频率很高经常被XX网站封IP(我知道这是不道德的,但是没办法)。为了突破IP限制需要动态替换代理ip。 代码如下: Java代码 import java.io...工作需要要写一个spider访问XXX网站,但是由于我访问频率很高经常被XX网站封IP(我知道这是不道德的,但是没办法)。为了突破IP限制需要动态替换代理ip。
代码如下:
- import java.io.BufferedInputStream;
- import java.io.IOException;
- import java.net.URL;
- import java.net.URLConnection;
- import org.apache.log4j.Logger;
- /**
- * @author Jason
- * @date Oct 27, 2010
- * @version 1.0
- */
- public class TestProxyIp {
- private static final Logger log = Logger.getLogger(TestProxyIp.class);
- public static void main(String[] args) throws IOException {
- System.setProperty("http.maxRedirects", "50");
- System.getProperties().setProperty("proxySet", "true");
- // 如果不设置,只要代理IP和代理端口正确,此项不设置也可以
- String ip = "93.91.200.146";
- ip = "221.130.18.5";
- ip = "221.130.23.135";
- ip = "221.130.18.78";
- ip = "221.130.23.134";
- ip = "221.130.18.49";
- ip = "111.1.32.36";
- ip = "221.130.18.49";
- ip = "221.130.18.49";
- System.getProperties().setProperty("http.proxyHost", ip);
- System.getProperties().setProperty("http.proxyPort", "80");
- //确定代理是否设置成功
- log.info(getHtml("http://www.ip138.com/ip2city.asp"));
- }
- 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;
- }
- return result;
- }
- }
运行结果如下:
如果最后显示的IP与本机网络IP不一样说明我们达到了代理的功能,我自己的IP是 119.6.69.202 ,现在访问的IP是111.160.68.18说明成功了。
如果按照正常想象来看显示的IP是最后一个,也就是ip = "221.130.18.49"; 结果却是111.160.68.18。我想这应该是代理服务器的原因,不过这个没有关系,达到我们想要的目的就行了。
使用动态IP需要注意的地方:
1、如果动态IP错误,会以本机网络IP访问。如果端口错误,会报错。
2、代理IP哪里来呢? 我是从优易ip代理软件免费IP里找的,然后存到自己本机。如果对方封了我现在的IP,那么我就更换IP。 -
纯JAVA实现修改本地IP(swing界面版)
2018-01-04 21:52:10纯JAVA实现修改本地IP地址(swing界面版),支持存储多个预设IP,可以切换使用(IO流实现),支持删除。 -
java获取Centos7服务器网卡ip 子网掩码 默认网关 DNS 同时设置网卡 及 重启网卡参考
2019-04-01 16:04:44java获取Centos7服务器网卡ip 子网掩码 默认网关 DNS 同时设置网卡 及 重启网卡参考 -
java根据ip获取国家、地区名称,附带ip库
2014-04-07 23:07:55java根据ip获取国家、地区名称,附带ip库 -
Java语言HttpClient使用代理IP
2019-12-19 10:01:03在访问一个网站时,有时我们不想让对方获取到我们的真实IP,这种情况下,就可以使用代理IP进行访问。 1、maven依赖 <dependency> <groupId>org.apache.httpcomponents</groupId> <...在访问一个网站时,有时我们不想让对方获取到我们的真实IP,这种情况下,就可以使用代理IP进行访问。
1、maven依赖
<dependency> <groupId>org.apache.httpcomponents</groupId> <artifactId>httpcore</artifactId> <version>4.4.10</version> </dependency> <dependency> <groupId>org.apache.httpcomponents</groupId> <artifactId>httpclient</artifactId> <version>4.5.6</version> </dependency> <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-io</artifactId> <version>1.3.2</version> </dependency>
2、使用代理IP实例
import org.apache.http.HttpEntity; import org.apache.http.HttpHost; import org.apache.http.client.config.RequestConfig; import org.apache.http.client.methods.CloseableHttpResponse; import org.apache.http.client.methods.HttpGet; import org.apache.http.impl.client.CloseableHttpClient; import org.apache.http.impl.client.HttpClients; import org.apache.http.util.EntityUtils; public class HttpProxy { public static void main(String[] args) throws Exception { // 创建HttpClient实例 CloseableHttpClient httpClient = HttpClients.createDefault(); //创建Httpget实例 ,http://2018.ip138.com/ic.asp为该网址返回对应的ip //以下为要访问的网址 HttpGet httpGet = new HttpGet("http://budwuv.v.vote8.cn"); //代理IP设置,代理 ip查询地址:https://www.xicidaili.com/ HttpHost httpHost = new HttpHost("112.87.68.95",9999); RequestConfig requestConfig = RequestConfig.custom() .setConnectTimeout(10000)//设置连接超时时间,单位毫秒 .setSocketTimeout(10000)//设置读取超时时间,单位毫秒 .setProxy(httpHost)//设置代理 .build(); httpGet.setConfig(requestConfig); //设置Http报文头信息 httpGet.setHeader("User-Agent", "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:50.0) Gecko/20100101 Firefox/50.0"); CloseableHttpResponse response = httpClient.execute(httpGet); // 执行http get请求 if (response != null){ HttpEntity entity = response.getEntity(); //获取返回实体 if (entity != null){ System.out.println("网页内容为:"); System.out.println(EntityUtils.toString(entity,"gbk")); } } if (response != null){ response.close(); } if (httpClient != null){ httpClient.close(); } } }
3、代理IP获取方式
访问 http://www.xicidaili.com/,可在该网站上爬取最新的高匿代理IP,保存到本地;当一个IP被屏蔽或获取连接超时时,取出下一个IP,当本地IP数不足时再重新爬取,以此类推。
4、验证举例
以网上在线投票系统为例,在PC端访问“投票吧”创建投票活动,设置为“相同IP不允许不能在30分钟内重复投票”,发布投票活动http://budwuv.v.vote8.cn。
正常访问投票网站,核心代码如下:
HttpGet httpGet = new HttpGet("http://budwuv.v.vote8.cn"); RequestConfig requestConfig = RequestConfig.custom() .setConnectTimeout(10000)//设置连接超时时间,单位毫秒 .setSocketTimeout(10000)//设置读取超时时间,单位毫秒 .build(); httpGet.setConfig(requestConfig); //设置Http报文头信息 httpGet.setHeader("User-Agent", "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:50.0) Gecko/20100101 Firefox/50.0"); CloseableHttpResponse response = httpClient.execute(httpGet); // 执行http get请求
页面截图如下:
用设置代理的方式重新访问该网站,核心代码如下:
HttpGet httpGet = new HttpGet("http://budwuv.v.vote8.cn"); //代理IP设置 HttpHost httpHost = new HttpHost("112.87.68.95",9999); RequestConfig requestConfig = RequestConfig.custom() .setConnectTimeout(10000)//设置连接超时时间,单位毫秒 .setSocketTimeout(10000)//设置读取超时时间,单位毫秒 .setProxy(httpHost)//设置代理 .build(); httpGet.setConfig(requestConfig); //设置Http报文头信息 httpGet.setHeader("User-Agent", "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:50.0) Gecko/20100101 Firefox/50.0"); CloseableHttpResponse response = httpClient.execute(httpGet); // 执行http get请求
该页面可以正常投票,截图如下:
-
Java TCP/IP Socket编程原书第2版.pdf
2017-05-11 19:44:15Java TCP/IP Socket编程原书第2版.pdf 个人收集电子书,仅用学习使用,不可用于商业用途,如有版权问题,请联系删除! -
Java中使用ip2region获取IP的地址
2022-01-30 19:13:51ip2region是准确率很高的 ip 地址定位库,本文介绍在Java中使用ip2region获取IP的地址ip2region
ip2region——准确率 99.9% 的 ip 地址定位库,0.0x 毫秒级查询,数据库文件大小只有 1.5M,提供了 java、php、c、python、node.js、golang 查询绑定和 Binary、B 树、内存三种查询算法。
特点
1. 99.9%准确率,定时更新:
数据聚合了一些知名 ip 到地名查询提供商的数据,这些是他们官方的的准确率,经测试着实比纯真啥的准确多了。
每次聚合一下数据需要 1-2 天,会不定时更新。
2. 标准化的数据格式:
每条 ip 数据段都固定了格式:城市Id|国家|区域|省份|城市|ISP
只有中国的数据精确到了城市,其他国家只能定位到国家,后前的选项全部是0,已经包含了全部你能查到的大大小小的国家。
(请忽略前面的城市 Id,个人项目需求)
3. 体积小:
生成的数据库文件 ip2region.db 只有 1.5M (1.2 版本前 3.5M)
4. 多查询客户端的支持,0.0x 毫秒级别的查询
已经集成的客户端有:java, php, c,python,php扩展,nodejs,golang。
使用
依赖引入
<!-- ip定位地址 --> <dependency> <groupId>org.lionsoul</groupId> <artifactId>ip2region</artifactId> <version>1.7</version> </dependency>
下载IP库 ip2region.db
下载地址
ip2region: 准确率99.9%的离线IP地址定位库,0.0x毫秒级查询,数据库文件大小只有1.5M,提供了java,php,c,python,nodejs,golang,c#等查询绑定和Binary,B树,内存三种查询算法 - Gitee.com
https://gitee.com/lionsoul/ip2region/tree/master/data 下载解压后只需要 data 目录下的 ip2region.db
ip2region.db 可以复制到 resources 目录下( maven 项目)
代码
//获取ip所在地址 public static String getAddressByIp(String ip) { try { //db URL url = ip2regionTest.class.getClassLoader().getResource("ip2region.db"); String dbPath = url.getFile(); File file = new File(url.getFile()); if (file.exists() == false) { System.out.println("Error: Invalid ip2region.db file"); } //查询算法 int algorithm = DbSearcher.BTREE_ALGORITHM; //B-tree //int algorithm = DbSearcher.BINARY_ALGORITHM; //Binary //int algorithm = DbSearcher.MEMORY_ALGORITYM; //Memory DbConfig config = new DbConfig(); DbSearcher searcher = new DbSearcher(config, dbPath); //define the method Method method = null; switch (algorithm) { case DbSearcher.BTREE_ALGORITHM: method = searcher.getClass().getMethod("btreeSearch", String.class); break; case DbSearcher.BINARY_ALGORITHM: method = searcher.getClass().getMethod("binarySearch", String.class); break; case DbSearcher.MEMORY_ALGORITYM: method = searcher.getClass().getMethod("memorySearch", String.class); break; } DataBlock dataBlock = null; if (Util.isIpAddress(ip) == false) { System.out.println("Error: Invalid ip address"); } dataBlock = (DataBlock) method.invoke(searcher, ip); //address格式:中国|0|广东省|深圳市|电信 String address = dataBlock.getRegion(); //下两行 防止截取报错 在本方法catch String[] splitIpString = address.split("\\|"); String succ = splitIpString[4]; return address; } catch (Exception e) { e.printStackTrace(); return "fail"; } }
main方法调用
ip为14.215.177.38。网上免费查询ip地址显示该ip是在广东省广州市且运营商是电信
public static void main(String[] args) { String addressByIp = getAddressByIp("14.215.177.38"); System.out.println(addressByIp); }
结果:
结果正确,该ip查询与网上查询一致
-
java拦截ip和限制ip访问接口的次数
2019-05-31 17:40:54本文出自付付讶的博客 ... 这两天因为公司需求需要加一个限制ip请求次数的功能,限制某些ip一天只能访问10次,现在总结一下(因为是老项目所以用的是servlet) 用到的jar包:commons-lang3-3.8.1.jar 用到... -
Java 设置代理IP 访问网络
2017-11-09 11:32:24一. 工具准备 为了能够验证Java程序是否真的通过代理访问网络,还是准备一个代理工具:fiddler,很好的一个能监视http、...import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; -
Java实现Ip代理池
2019-01-19 14:49:20设置Ip代理很多时候都会有用到,尤其是在写爬虫相关项目的时候。虽然自己目前没有接触这种需求,但由于最近比较闲,就写着当作练习吧 爬取代理IP 爬取 关于爬取代理IP,国内首先想到的网站当然是 西刺代理 。首先写... -
Java获取真实Ip地址
2021-09-09 16:59:56Java获取真实Ip地址 -
java中为ChromeDriver设置代理IP
2018-10-05 13:57:43// 设置代理ip String ip = "ip:port"; options.addArguments("--proxy-server=http://" + ip); WebDriver driver = new ChromeDriver(options); driver.get("http://www... -
Java通过方法实现IP格式校验
2022-03-25 08:46:43Java通过方法实现IP格式校验 代码如下: * @auther baijiayi * @Date 2022/3/23 9:00 */ public class IPCheckTest { /** * Ip校验 * @param ipAddress 单个ip * @return */ public static boolean ... -
java获取客户端IP地址工具类
2021-11-01 15:19:15代码如下自取: import lombok.extern.slf4j.Slf4j; ... import java.net.InetAddress;... * @Title 获取客户端ip地址类 * @Author YangWanJie * @Date 2021/6/30 16:08 * @versioin V1.0 **/ @Slf -
java 比较IP大小 & 判断IP是否在IP段内
2019-05-14 16:39:01public class IpUtil { ... /*验证IP是否属于某个IP段 * * ipSection IP段(以'-'分隔) * ip 所验证的IP号码 * */ public static boolean ipExistsInRange(String ip,String ipSection) {... -
java实现IP归属地查询
2019-02-25 16:27:31IP归属地查询 使用ip-attribution.dat文件实现IP归属地查询。 import java.io.DataInputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java... -
Java获取当前ip地址
2019-05-13 21:41:05import java.net.Inet4Address; import java.net.InetAddress; import java.net.UnknownHostException; public class InetAddressInUse { public static void main(String[] args){ ... InetAddress ip4 =... -
java根据ip获取经纬度城市地址
2019-12-01 22:35:51IP地理位置使用 IP地理定位本质上是不精确的。位置通常靠近人口中心。GeoIP数据库提供的任何位置均不得用于识别特定地址或家庭。 使用Accuracy Radius作为我们为IP地址返回的纬度和经度坐标的地理位置精度的指示。IP... -
java中selenium设置chrome浏览器为开发者模式与IP代理
2019-08-30 10:51:53java中selenium设置chrome浏览器为开发者模式与IP代理前言代码 前言 之前为公司写了个爬虫项目,有时候为了绕过网站的反爬机制需要用到ip代理以及设置浏览器为开发者模式,看了一些selenium官方文档,没发现有具体... -
java 获取客户端真实ip、局域网ip ip工具类
2021-10-13 11:53:59public class IpUtils { public static String getIpAddr(HttpServletRequest request) { if (request == null) { return "unknown"; } String ip = request.getHeader("x-forwarded-for... if (ip == null || . -
java技术--Linux(Ubuntu)设置静态IP地址
2020-03-13 11:30:381.通常安装完Ubuntu系统后,通过命令ifconfig获取到的IP都是动态的 (1)动态IP,重新启动系统后IP会变 (2)通过设置静态IP,从而...windows如果人为设置一个IP,就不会改变 2.Ubuntu修改静态IP过程如下 (1)先... -
Java IP地址解析工具ip2region
2022-04-10 16:21:44ip2region 一、介绍 在移动互联网的应用中,经常需要根据用户的位置信息等做一些用户侧信息的统计分析。而要拿到用户的位置信息,一般有两个方法: GPS 定位的信息和用户 IP 地址。由于每个手机都不一定会打开 GPS... -
Java实现 对ip白名单的限制
2018-11-07 09:30:11有些项目的接口是需要权限访问,比如限制IP、做权限控制,等等方案,本文是限制ip权限设置访问策略。 先看测试效果: 测试: 注意访问需要输入:http://127.0.0.1:8981/ 在配置文件加上本地的ip 10.9.160.135 ... -
【弄nèng - Java基础】Java校验IP正则表达式
2018-04-18 16:01:38IP正则表达式 ^(([1-9]|([1-9]\d)|(1\d\d)|(2([0-4]\d|5[0-5]))).)(([1-9]|([1-9]\d)|(1\d\d)|(2([0-4]\d|5[0-5]))).){2}([1-9]|([1-9]\d)|(1\d\d)|(2([0-4]\d|5[0-5])))$ 事例 pub... -
java根据ip地址获取用户地理位置
2019-04-25 17:00:07工作项目需要,根据用户向服务器请求的ip地址获取用户所在的地理位置。 具体代码 话不多说,直接上代码(作为一个负责任的程序员,我把import内容都贴贴出来了): /** * FileName: ... -
Java验证代理ip是否成功
2020-05-27 15:33:51前几天抓一个网站我觉得频率不高没想到竟然被封ip了 于是乎搞了个代理继续抓 一开始抓免费的高匿ip用着得了,后来发现抓来的都是废品不能用 md,浪费时间 于是找了个付费获取代理ip网站 就不打广告了 有试用...