在Java中实现有账号密码的Http代理访问
例如10.202.0.236是我们内网的一个服务,但是我们现在无法直接访问怎么办,可以通过一个可以访问内网的http代理服务器来进行访问。
局部使用
这里的主函数就是main函数了;
构建了三个方法,分别是getProxy,setAuthProperties和getContent。
这里的三个方法没有必要一定这么设置,只是我个人的习惯,觉得这样分开看上去会更加可读一些。
三个方法
getProxy
getProxy的用处是获取到proxy对象传入到URLConnection中作为参数来访问目标的地址,需要传入一个列表,分别对应的是http代理服务器的ip、port、username和password。
setAuthProperties
setAuthProperties是用于设置http的认证信息,以便于代理服务器可以认证通过,在getProxy中会对此方法进行调用。
Authenticator.setDefault是需要设置的,否则无法实现对代理服务器的用户名密码认证;
并且System.setProperty(“jdk.http.auth.tunneling.disabledSchemes”, “”);在JDK8以上都需要将这里这样设置的;
其实这里的System.setProperty也可以通过是启动Java程序时设置-Dhttp.proxyUser=username、-Dhttp.proxyPassowrd=password等设置的。
getContent
getContent就是最终的将二进制数据流转化为String进行输出了。
具体代码
package com.learn.myservlet;import java.io.IOException;
import java.io.InputStream;
import java.net.*;
import java.util.ArrayList;
import java.util.List;public class MyProxyLearn {public static void main(String[] args) throws IOException {URL url = new URL("http://10.202.0.236:8080");// 构建传入代理连接的ip、port和用户名密码List<String> authList = new ArrayList<>();String hostname="myhost";String port = "myport";String authUser = "myuser";String authPassword = "mypassword";authList.add(0,hostname);authList.add(1,port);authList.add(2,authUser);authList.add(3,authPassword);//通过代理进行连接URLConnection urlConnection = url.openConnection(getProxy(authList));//构建input输入流InputStream input = urlConnection.getInputStream();//将内容打印至控制台System.out.println(getContent(input));}//设置Proxy并返回public static Proxy getProxy(List<String> authList){String hostname = authList.get(0);int port = Integer.parseInt(authList.get(1));String authUser = authList.get(2);String authPassword = authList.get(3);//设置认证信息setAuthProperties(authUser,authPassword);//构造proxy的地址和端口并返回SocketAddress socketAddress = new InetSocketAddress(hostname,port);Proxy proxy = new Proxy(Proxy.Type.HTTP,socketAddress);return proxy;}//设置认证相关信息private static void setAuthProperties(String authUser, String authPassword) {System.setProperty("http.proxyUser", authUser);System.setProperty("http.proxyPassword", authPassword);System.setProperty("jdk.http.auth.tunneling.disabledSchemes", "");Authenticator.setDefault(new Authenticator() {@Overridepublic PasswordAuthentication getPasswordAuthentication() {return new PasswordAuthentication(authUser, authPassword.toCharArray());}});}//获取网页的内容,通过StringBuilder将bytes转化为charpublic static String getContent (InputStream input) throws IOException {String content;int n;StringBuilder sb = new StringBuilder();while ((n = input.read()) != -1) {sb.append((char) n);}content = sb.toString();return content;}}
全局使用
构建了两个方法,分别是setAuthProperties和getContent。
setAuthProperties
设置所有的代理信息的
getContent
将input转化为String类型数据
package com.learn.myservlet;import java.io.IOException;
import java.io.InputStream;
import java.net.*;
import java.util.ArrayList;
import java.util.List;public class MyProxyLearn {public static void main(String[] args) throws IOException {URL url = new URL("http://10.230.0.236:8081");// 构建传入代理连接的ip、port和用户名密码List<String> authList = new ArrayList<>();String hostname="myhost";String port = "myport";String authUser = "myuser";String authPassword = "mypassword";authList.add(0,hostname);authList.add(1,port);authList.add(2,authUser);authList.add(3,authPassword);//加载全局的代理setAuthProperties(authList);URLConnection urlConnection = url.openConnection();//构建input输入流InputStream input = urlConnection.getInputStream();//将内容打印至控制台System.out.println(getContent(input));}//设置认证相关信息private static void setAuthProperties(List<String> authList) {String hostname = authList.get(0);String port = authList.get(1);String authUser = authList.get(2);String authPassword = authList.get(3);System.setProperty("http.proxyHost", hostname);System.setProperty("http.proxyPort", port);System.setProperty("http.proxyUser", authUser);System.setProperty("http.proxyPassword", authPassword);System.setProperty("jdk.http.auth.tunneling.disabledSchemes", "");Authenticator.setDefault(new Authenticator() {@Overridepublic PasswordAuthentication getPasswordAuthentication() {return new PasswordAuthentication(authUser, authPassword.toCharArray());}});}//获取网页的内容,通过StringBuilder将bytes转化为charpublic static String getContent (InputStream input) throws IOException {String content;int n;StringBuilder sb = new StringBuilder();while ((n = input.read()) != -1) {sb.append((char) n);}content = sb.toString();return content;}}
在Java中实现有账号密码的Http代理访问相关推荐
- android中注册的账号密码储存在,Android中使用SharedPreferences完成记住账号密码的功能...
效果图: 记住密码后,再次登录就会出现账号密码,否则没有. 分析: SharedPreferences可将数据存储到本地的配置文件中 SharedPreferences会记录CheckBox的状态,如 ...
- 为什么MySQL输入正确账号密码后仍然拒绝访问
MySQL在输入正确的账号密码后仍然拒绝访问可能是由于以下几种原因造成的: 账号权限问题,检查该账号是否具有连接数据库的权限. IP地址限制,检查该账号是否只能在特定的IP地址连接. MySQL服务器 ...
- 清除WIN2000中的Administrator账号密码
Windows 2000所在的WinntSystem32Config目录下有个SAM文件(即账号密码数据库文件),它保存了Windows 2000中所有的用户名和密码.当你登录的时候,系统就会把你键入 ...
- 云服务器中mongodb配置账号密码 图文讲解(全)
目录 前言 1. 配置账号密码 2. 配置授权auth 3. 登录 前言 对于安装mongo可看我之前的文章: 云服务器下载安装mongo数据库并远程连接详细图文版本(全) 给mongodb数据库设置 ...
- android中注册的账号密码储存在,android SharedPreferences实现用户的注册和保存账号密码...
在android开发中,我们做用户登录和注册的时候需要将用户名和密码保存,下次打开的时候记住应户名和密码.关于注册保存用户密码的方式和记住用户名和密码的保存方式有多种,这里介绍SharaedPrefe ...
- vmvare中centos忘记账号密码
步骤 一.重启系统,在开机过程中,快速按下键盘上的方向键↑和↓.目的是告知引导程序,我们需要在引导页面选择不同的操作,以便让引导程序暂停. 以下是暂停后的界面,可以查看下方的英文可知↑和↓的作用. 二 ...
- java用数组存放账号密码_从零自学Java-7.使用数组存储信息
1.创建数组: 2.设置数组的大小: 3.为数组元素赋值: 4.修改数组中的信息: 5.创建多维数组: 6.数组排序. 程序SpaceRemover:显示输入字符串,并将其中所有的空格字符替换为句点字 ...
- 查看路由器中宽带的账号密码等
首先你要能进入路由器管理界面,如果不能就请不要看下面了 进入路由器,一般左侧栏有系统工具,其中有 备份配置 之类的链接,点开 备份配置文件,会出现现在页面,把文件下载到桌面 是一个XXXXX.bin ...
- 一条命令导出电脑中所有wifi账号密码
废话不多说,直接上才艺!cmd打开,不需要管理员权限 for /f "skip=9 tokens=1,2 delims=:" %i in ('netsh wlan show pro ...
- Java中,内部类的概述和内部类的访问特点和内部类的分类(内部类的位置)
内部类的概述: 把类定义在另一个类的内部,该类就被称为内部类. 举例:把类B定义在类A中,类B就被称为内部类. 内部类的访问特点: A:内部类可以直接访问外部类的成员,包括私有成员. B:外部类要想访 ...
最新文章
- 为什么说Python是伟大的入门语言
- Java程序员总结分布式架构,你又了解多少呢?
- 【压缩率3000%】上交大ICCV:精度保证下的新型深度网络压缩框架
- ASP.NET MVC 实现模式 - ModelBuilder
- 5种方法实现“反转字符串”
- http --- 公开密钥加密(非对称加密)的几个概念
- Cocos Creator 粒子效果插件
- web端四方支付 只有安卓可以跳转
- Android Contact分析(二):实战篇之读取联系人,模糊查询,通过汉字返回拼音
- F1电竞全球锦标赛首度落地中国
- Conflux DAO 社区技术委员会成立 助力生态繁荣发展
- 安卓开发良好的习惯(想到就更新)
- 牛客刷题<19>使用3-8译码器实现逻辑函数
- 区块链经济:机构加密经济学的初学者指南
- 为每天节省两小时-华芸AS4004T万兆NAS搭建测试
- 越狱Season 1-Episode 1: the pilot
- 虚拟机双硬盘安装ubuntu固态+机械
- 根据年份和月份来计算天数
- JSP设置Excel表格换行_外企大公司的 Excel 表格,都是这样设置隐藏的
- 数据分析--布林带策略(择时)
热门文章
- C++求一元二次方程根
- 使用video.js遇到的坑。VIDEOJS: WARN: Player “player3“ is already initialised. Options will not be applied.
- MaskRCNN识别Pascal VOC 2007
- 【Excel】某列数据有效性根据另外一列数据有效性进行动态更改
- 管理大师德鲁克管理学精髓
- ESX通过命令行重启虚拟机
- 一开电脑wifi就断网_为什么电脑一连wifi就断网,
- 运动会加油稿计算机学院,学院运动会加油稿范文
- linux合并mp4,Linux 下使用ffmpeg 将批量合并ts文件,合成mp4格式
- 从零基础入门Linux系统