Java程序通过代理访问网络
问题背景
最近工作上有开发爬虫的任务,对目标网站数据进行抓取,由于大部分网站都在国外,无法直接访问,需要通过代理才能登录。爬虫部署的服务器在香港,所以爬虫部署到服务器后,是可以访问目标网站的,但本地开发调试程序时,需要通过代理才能访问。
这篇文章就带大家了解一下如何在Java程序中使用代理访问网络。
解决方案
你需要一个代理服务器,和一个可以连接到此服务器的客户端。
花点银子买一个稳定的账号,或者自己搭建一个。
这里我使用自己搭建的Shadowsocks
代理服务器,使用Shadowsocks-Windows
作为本地代理的客户端,并开启默认的1080
端口,以供本地其他程序通过代理访问网络。
指定 Java 程序的代理服务器地址和端口
有两种指定方式:通过 命令行参数 指定
如果只需要考虑代理 HTTP 协议请求,只需添加如下命令行参数:-Dhttp.proxyHost=127.0.0.1 -Dhttp.proxyPort=1080
- 1
想要 HTTP 和 HTTPS 协议的请求都通过代理访问网络,可以追加上:
-Dhttps.proxyHost=127.0.0.1 -Dhttps.proxyPort=1080
- 1
最终填写的值为:
-Dhttp.proxyHost=127.0.0.1 -Dhttp.proxyPort=1080 -Dhttps.proxyHost=127.0.0.1 -Dhttps.proxyPort=1080
- 1
在程序中使用System.setProperty(String, String)
同样很简单,这里直接上代码:String proxyHost = "127.0.0.1"; String proxyPort = "1080";System.setProperty("http.proxyHost", proxyHost); System.setProperty("http.proxyPort", proxyPort);// 对https也开启代理 System.setProperty("https.proxyHost", proxyHost); System.setProperty("https.proxyPort", proxyPort);
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
推荐使用第一种方案,通过VM Option 的方式,对代码没有任何侵入,绿色环保。
测试
这里我在Eclipse中使用第一种方法进行测试。
测试代码
import java.io.IOException; import java.io.InputStream; import java.net.URL; import java.net.URLConnection;public class Test {public static void main(String[] args) throws IOException {URL url = new URL("https://google.com");URLConnection connection = url.openConnection();connection.connect();InputStream inputStream = connection.getInputStream();byte[] bytes = new byte[1024];while (inputStream.read(bytes) >= 0) {System.out.println(new String(bytes));}} }
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 测试结果,可以正常访问Google等网站。
总结
除了上述 http.proxyHost
和 http.proxyPort
,以及 https.proxyHost
和 https.proxyPort
在代理时比较有用外,还有一个属性也比较有用,那就是 http.nonProxyHosts
,它用来指定哪些主机不使用代理,如果有多个,用英文竖线(|
)分隔,可以使用星号 (*
)作为通配符。
下表是常用协议对应的代理属性:
协议 | 属性(代理主机/代理端口/不使用代理的主机列表) | 默认值 |
---|---|---|
HTTP | http.proxyHost | <none> |
http.proxyPort | 80 | |
http.nonProxyHosts | <none> | |
HTTPS | https.proxyHost | <none> |
https.proxyPort | 443 | |
https.nonProxyHosts | <none> | |
FTP | ftp.proxyHost | <none> |
ftp.proxyPort | 80 | |
ftp.nonProxyHosts | <none> | |
SOCKS | socksProxyHost | <none> |
socksProxyPort | 1080 |
详细介绍请参考官方说明:Java Networking and Proxies
转载自:https://xueliang.org/article/detail/20170116145848852
Java程序通过代理访问网络相关推荐
- iterm通过代理访问网络
下载fabric的docker镜像的时候,mac已经开了代理,但速度还是巨慢,原来iterm通过代理访问网络还要单独设置,在~/.zshrc 或者~/.bash_profile 配置文件中添加如下配置 ...
- python通过代理访问网页_【已解决】Python中使用代理访问网络
[问题] 在用Python的urllib2等库,访问网络,发现某些网址访问很慢,比如: 但是,当使用代理(此处用的是gae)后,发现访问速度就快很多了. 所以,希望给Python的访问网络,增加代理的 ...
- java程序通过http代理访问网络获取节假日数据
最近接到一个需求,需要计算工作日,比如某个周一调休放假,某个周六调休上班,由于节假日的安排是国家发布的,我们的系统是在内网,那就需要根据国家发布的安排在自己的数据库里记录,想到如果对着日历去录数据那就 ...
- java通过代理访问网络
使用代理方式连接到网络 @Testpublic void t13(){String charset = "utf-8" ; String proxyHost = "代理地 ...
- JAVA程序员常用访问网址
技术桟更新总有一些不得不访问的官网不得不记录下来,放在本地太容易忘了,分享一波,也是为了防止自己忘了!!!写到哪儿算哪儿 国家严打版本问题,hacker类文章不能看了!就离谱 目录 1.记事本工具 2 ...
- 一个JAVA程序员经常访问的网站
综合技术网站: CSDN http://www.csdn.net/ 51CTO http://www.51cto.com/ 开源中国社区 http ...
- 为诺基亚S40手机添加java程序的cmwap代理配置!
很多用诺基亚S40手机的朋友会发现这样一个问题,只要使用cmwap接入点,不论网络怎样设置,有些java程序就是不能联网,比如Opera Mini和英文版的Google Maps,而使用cmnet就可 ...
- 代理ip让用户访问网络不受限
网络业内人士对于代理ip应该是十分熟悉的,由于很多网站访问的受限,很多人无法顺利的访问一些网站.尤其是对于一些国外网站想要访问都会受到IP地址的限制.那么该如何才能避免被受限呢?这就需要使用代理服务器 ...
- 《Linux运维总结:内网服务器通过代理访问外网服务器(方法一)》
一.背景 说明:192.168.1.191可以上外网,192.168.1.192不能上外网,需要使用代理的方法实现192.168.1.192主机可以访问外网. 内网ip 外网ip 操作系统 192.1 ...
最新文章
- 所有表单对象_Laravel 表单方法伪造与 CSRF 攻击防护
- c语言坐标扫雷程序,用C语言写一个扫雷程序
- 使用Jdom2将一个xml文件添加到另一个xml中
- Zinterstore 命令
- 编译安装Centos7.2+Apache2.4.25+PHP7.2.10+Mysql5.6.16
- 发布 128 核 Altra Max,自研内核,明年推出 5nm 处理器,“性能怪兽”Ampere 搞大事?
- python建模仿真 matlab_清华大学出版社-图书详情-《仿真建模与MATLAB实用教程》
- metamask插件_Remix+metamask+myetherwallet+Ciper 完成主网发币(实战 十)
- java 数字千分位_java实现数字千分位的显示
- 印象笔记 离线版_印象笔记离线版
- 拍视频用30帧还是60帧更好,帧率如何设置60帧的问题
- 新浪微博PC端登陆js分析及Python实现微博post登陆
- Jetpack 架构组件:Room 数据库应用
- 哈利波特系列之伏地魔生平
- 多模态情感分析的研究现状
- 打造APP引导页3D切换特效
- 关于项目运行或者打包出现“primordials is not defined”导致运行或打包失败问题
- 研究生必备快速查找翻译阅读外文文献方法
- 计算机系统对工业相机影响,如何理解工业相机的校准
- python星号和双星号的区别
热门文章
- C/C++标准库到底是什么?
- 2014年24如何改变球段魔尺视频教程
- 软编码Flv 到Mp4 容器(五) fmp4 ftyp box 和moovmvhd box详解
- 2019-2020-2 20175227张雪莹《网络对抗技术》 Exp2 后门原理与实践
- Type c手机怎么实现一边充电一边听歌(边充边听放方案)
- CodeForces 520B Two Buttons
- 获取手机设备型号、系统版本、手机型号等信息
- 从知道到懂得,从懂得到做到
- 三角洲杂志三角洲杂志社三角洲编辑部2023年第9期目录
- 矩阵运算库 C语言 (Matrix_hub)