java编程,通过代理服务器访问外网的FTP

有些时候我们的网络不能直接连接到外网, 需要使用http或是https或是socket代理来连接到外网, 这里是java使用代理连接到外网的一些方法, 希望对你的程序有用.方法一:使用系统属性来完成代理设置, 这种方法比较简单, 但是不能对单独的连接来设置代理:    /**     *@paramargs     */    /**     *@paramargs     */    public static void main(String[] args) {        Properties prop = System.getProperties();        // 设置http访问要使用的代理服务器的地址        prop.setProperty("http.proxyHost", "192.168.0.254");        // 设置http访问要使用的代理服务器的端口        prop.setProperty("http.proxyPort", "8080");        // 设置不需要通过代理服务器访问的主机,可以使用*通配符,多个地址用|分隔        prop.setProperty("http.nonProxyHosts", "localhost|192.168.0.*");        // 设置安全访问使用的代理服务器地址与端口        // 它没有https.nonProxyHosts属性,它按照http.nonProxyHosts 中设置的规则访问        prop.setProperty("https.proxyHost", "192.168.0.254");        prop.setProperty("https.proxyPort", "443");        // 使用ftp代理服务器的主机、端口以及不需要使用ftp代理服务器的主机        prop.setProperty("ftp.proxyHost", "192.168.0.254");        prop.setProperty("ftp.proxyPort", "2121");        prop.setProperty("ftp.nonProxyHosts", "localhost|192.168.0.*");        // socks代理服务器的地址与端口        prop.setProperty("socksProxyHost", "192.168.0.254");        prop.setProperty("socksProxyPort", "8000");        // 设置登陆到代理服务器的用户名和密码        Authenticator.setDefault(new MyAuthenticator("userName", "Password"));    }    static class MyAuthenticator extends Authenticator {        private String user = "";        private String password = "";        public MyAuthenticator(String user, String password) {            this.user = user;            this.password = password;        }        protected PasswordAuthentication getPasswordAuthentication() {            returnnew PasswordAuthentication(user, password.toCharArray());        }    }方法二:使用Proxy来对每个连接实现代理, 这种方法只能在jdk 1.5以上的版本使用(包含jdk1.5), 优点是可以单独的设置每个连接的代理, 缺点是设置比较麻烦:    public static void main(String[] args) {        try {            URL url = new URL("http://www.baidu.com");            // 创建代理服务器            InetSocketAddress addr = new InetSocketAddress("192.168.0.254",                    8080);            // Proxy proxy = new Proxy(Proxy.Type.SOCKS, addr); // Socket 代理            Proxy proxy = new Proxy(Proxy.Type.HTTP, addr); // http 代理            // 如果我们知道代理server的名字, 可以直接使用            // 结束            URLConnection conn = url.openConnection(proxy);            InputStream in = conn.getInputStream();            // InputStream in = url.openStream();            String s = IOUtils.toString(in);            System.out.println(s);        } catch (Exception e) {            e.printStackTrace();        }    }不是很详细, 有什么问题还望大家指正================================/* * Output: *   */

import java.io.InputStream;import java.net.URL;

public class MainClass {

  public static void main(String args[]) {    try {

      URL url = new URL("http://www.java2s.com");

      // Obtain output stream      InputStream is = url.openStream();

      // Read and display data from url      byte buffer[] = new byte[1024];      int i;      while ((i = is.read(buffer)) != -1) {        System.out.write(buffer, 0, i);      }    } catch (Exception e) {      e.printStackTrace();    }  }}————————————————————————————————————————————————————————

package exp;

import java.io.BufferedInputStream;import java.io.BufferedOutputStream;import java.io.BufferedReader;import java.io.File;import java.io.FileOutputStream;import java.io.InputStream;import java.io.InputStreamReader;import java.net.InetSocketAddress;import java.net.Proxy;import java.net.URL;import java.net.URLConnection;

public class Download {    // 生成图片函数    public void makeImg(String imgUrl, String fileURL) {        try {            InetSocketAddress addr = new InetSocketAddress("proxy_ip", 7777);            Proxy proxy = new Proxy(Proxy.Type.HTTP, addr); // http 代理            // 如果我们知道代理server的名字, 可以直接使用            // 结束            URLConnection conn = new URL(imgUrl).openConnection(proxy);            System.out.println(conn);            BufferedInputStream in = new BufferedInputStream(conn.getInputStream());            // 创建流//            BufferedInputStream in = new BufferedInputStream(//                    new URL(imgUrl).openStream());            // 生成图片名            int index = imgUrl.lastIndexOf("/");            String sName = imgUrl.substring(index + 1, imgUrl.length());            System.out.println(sName);            // 存放地址            File img = new File(fileURL + sName);            // 生成图片            BufferedOutputStream out = new BufferedOutputStream(                    new FileOutputStream(img));            byte[] buf = new byte[2048];            int length = in.read(buf);            while (length != -1) {                out.write(buf, 0, length);                length = in.read(buf);            }            in.close();            out.close();        } catch (Exception e) {            e.printStackTrace();        }    }    public static void main(String[] args) {        new Download().makeImg("http://i3.ku6img.com/cms/jc/201107/26/129920Hme3_1.jpg", "./");//        new Download().makeImg("http://baidu.com", "C:\\Users\\decli\\Desktop\\");    }}
时间: 2024-12-04 16:18:57

java编程,通过代理服务器访问外网的FTP的相关文章

内网服务器通过Squid代理访问外网

环境说明 项目整体需部署Zabbix监控并配置微信报警,而Zabbix Server并不能访问外网,故运维小哥找了台能访问外网的服务器做Suqid代理,Zabbix Server服务器通过代理服务器访问外网. 操作说明 [[email protected] ~]# echo "1" >/proc/sys/net/ipv4/ip_forward [[email protected] ~]# yum -y install squid [[email protected] ~]# vi

安装TMG后内网访问外网FTP权限受限的解决方法

公司使用tmg2010搭了个vpn服务器,在拔入vpn通过ftp工具访问ftp时会报550 access is denied. 而通过普通ftp访问登录可以看到文件列表,上传文件时提示没有权限,错误信息如下图 没有拔入vpn时访问ftp则一切正常. 原因分析: tmg安装完成后默认策略是禁止ftp上传功能的,默认访问ftp时只有只读权限. 处理方法 打开tmg管理控制台:系统--应用程序筛选器,找到ftp访问筛选器,右击属性--ftp属性--允许活动的ftp访问. 如果此项没有勾选,则通过tmg

windows 代理服务器的搭建,提供Android 端访问外网.

这段时间遇到一个情况,移动的网络收费.但是可以访问学校内部的网络,比如说学校官网图书馆之类了.所以我这里便想到一个方法,用学校内部一个可以访问互联网的主机充当代理服务器(我这里使用自己的电脑,非服务器). 一,需要的软件: PC端,CCProxy Android端,proxydroid  如果想设置全局代理 (global proxy ) 手机需要  root   该软件的源码地址  :https://github.com/madeye/proxydroid 二,搭建必要条件: 充当服务器的PC

Java编程思想(三) —— 访问权限的控制

之前没去注意的修饰符,一般变量前面没添加,一个是不知道有什么用,一个是懒,后面遇到项目的时候就会发现私有和公有区别还是很大的. (1)首先是包名 使用一个类的时候,例如集合类,就需要引入这个包,然后再使用该包下面的类.如: package com.myown.iaiti; public class Print { static void print(String s){ System.out.println(s); } } 自定义的包,通过引入自己的包,以后你就可以使用自己写的方法进行字符串的打

关于在J2EE里使用代理访问外网的问题

今天写了一段代码想在service里访问一个外部网站,在service的方法里写了如下代码 System.setProperty("http.proxyType", "4"); System.setProperty("http.proxyPort", port); System.setProperty("http.proxyHost", host); System.setProperty("http.proxySet

阿里云内网机器通过squids代理上访问外网资源

一.背景 代理服务器A(10.0.1.2)机器有公网地址可正常访问外网 业务服务器B(10.0.1.33)机器无公网地址不能访问外网 代理服务器A((10.0.1.2)和业务服务器B(10.0.1.33)在公一个数据中心(同一个局域网) 需要实现B访问外网通过A代理出去 二.安装 在代理服务器A(10.0.1.2)机器上安装squid yum install openssl squid -y 然后启动服务 service squid start 2.在业务服务器B(10.0.1.33)机器宿主目

6.DNS公司PC访问外网的设置 + 主DNS服务器和辅助DNS服务器的配置

网站部署之~Windows Server | 本地部署 http://www.cnblogs.com/dunitian/p/4822808.html#iis DNS服务器部署不清楚的可以看上一篇:http://www.cnblogs.com/dunitian/p/5439816.html 公司内部的pc,基本上dns都是内部的服务器(因为有一些内部站点和系统) 那么DNS服务器怎么设置才能让公司PC访问外网呢? 开下转发器就可以了 输入ISP提供的DNS服务器的IP地址等:(此图不全,只当参考)

让devstack中的vm访问外网

devstack默认会建立一个Public网络,地址为172.24.4.0/24,但是这个网络并不是运营商分配给我们的网络,所以只能通过nat的方式让devstack建立的虚拟机访问外网. br-ex和br-phy都不需要绑定到任何的物理网卡,所有网络都是内部的. 想让vm通过Public访问外部网络,需要执行如下命令: ifconfig br-ex 172.24.4.1/24 iptables -t nat -I POSTROUTING -s 172.24.4.0/24 -j MASQUERA

个人成长日志—Centos网络配置后不能访问外网

现象: ping内网正常 ping外网ip,域名均无法正常,返回错误提示:connect: Network is unreachable 运行命令route显示,发现,没有任何的网关信息.然后检查网卡配置,配置信息如下: DEVICE=eth0 HWADDR=........(请忽略) TYPE=Ethernet UUID=.........(忽略) ONBOOT=yes NM_CONTROLLED=yes BOOTPROTO=static IPADDR=192.168.118.131 NETM