论坛积分策略 论坛VIP区开放申请 我爱电脑万人签名活动 原声大碟520欢迎你 广告位招租
发新话题
打印

[java] 用Java语言编写通过代理访问的应用程序

用Java语言编写通过代理访问的应用程序

本技巧将向您讲述如何编写可通过代理访问因特网上的Web服务器的Java应用程序。在Java应用程序中加入代理支持只需额外编写几行代码,且不依赖任何安全性“漏洞”。
6 N5 F$ t% R! w0 z( k) P打造最好的电脑自学交流论坛电脑,技术,IT,学习,交流,网络安全,QQ,硬件,软件,编程,教程,建站9 X& z0 F* a. I2 D5 Z4 n- S% W6 `8 r" b

+ F  M% R4 ]. O; b9 }  l5 B几乎所有的公司都十分关注保护自己的内部网络,以防黑客及入窃者。一种常见的安全措施是完全断开与因特网的连接。如果黑客们不能连接到您的任何一台机器,他们就不能非法进入您的系统。这种策略产生的不利副作用是,内部用户无法访问外部的因特网服务器,如Yahoo或JavaWorld。为了解决这一问题,网络管理员通常安装“代理服务器”。实际上,代理是安装于因特网和内部网之间的一种服务,用来管理这两个领域之间的连接。代理有助于减少安全性的外部威胁,同时还允许内部用户访问因特网服务。尽管Java使得编写因特网客户机不再困难,但是如果客户机不能通过代理,则它们毫无用处。幸运的是,Java使得使用代理支持不再困难--如果您知道密诀,这就是事实。
1 t* `9 @, S9 s打造最好的电脑自学交流论坛www.520diannao.com. u4 \' M6 `' ?( b! Q! l4 x/ X
将Java和代理结合起来的秘诀即在Java运行时激活特定的系统属性。这些属性未被写入正式文件,只是作为Java传说的一部分在Java编程人员中秘传。为了支持代理,Java应用程序不仅需要指定代理本身的信息,而且需要指定用于认证的用户信息。在开始使用网际协议之前,您需要在程序中添加以下几行代码:
9 k9 z1 c- c  ?# Q我爱电脑技术论坛
6 u5 v9 n/ X: k; }5 U我爱电脑技术论坛
5 D5 c  L7 H7 R' w我爱电脑技术社区--打造最好的电脑技术自学交流平台System.getProperties().put("proxySet","true"); 电脑,技术,IT,学习,交流,网络安全,QQ,硬件,软件,编程,教程,建站2 }% l( ^- U& U! n% ]

" g# `2 M& _$ t0 dwww.520diannao.comSystem.getProperties().put("proxyHost","myProxyMachineName"); ) u& ~/ e+ q  _

7 q/ [* v3 S: W' I9 d. K( j我爱电脑技术社区--打造最好的电脑技术自学交流平台System.getProperties().put("proxyPort","85"); 电脑,技术,IT,学习,交流,网络安全,QQ,硬件,软件,编程,教程,建站: Z- }# U, L8 E' Q2 x

4 r) d. A! B& a7 X我爱电脑技术论坛我爱电脑技术社区--打造最好的电脑技术自学交流平台7 e  j7 e* V! z4 e, \, l' ~1 f$ p  O
上面的第一行通知Java您要通过代理进行连接,第二行指定代理所在的机器,第三行指定代理监听的端口。有些代理在授权用户访问因特网之前,要求用户输入用户名和口令。如果您使用位于防火墙之内的Web浏览器,您就可能碰到过这种情况。以下是执行认证的方法:
- ^1 h7 [; C( s; K: x5 x1 n6 e+ Z我爱电脑技术社区--打造最好的电脑技术自学交流平台
" B/ G5 C% ~, G* k) G/ _6 S* O我爱电脑技术论坛我爱电脑技术论坛) n: i7 @0 D& ?; J" r
URLConnectionconnection=url.openConnection();
0 X% |3 O0 T" h5 a5 v" a, |8 G我爱电脑技术社区--打造最好的电脑技术自学交流平台
8 e/ s8 k, X+ U4 ~. V# }! S5 Z我爱电脑技术社区--打造最好的电脑技术自学交流平台Stringpassword="username:password";
& O6 R% n# X2 G. S: j- V电脑,技术,IT,学习,交流,网络安全,QQ,硬件,软件,编程,教程,建站  i$ M  t) K- T0 L9 O7 D, c
StringencodedPassword=base64Encode(password);
  v, w+ f7 J( ?; n我爱电脑技术论坛电脑,技术,IT,学习,交流,网络安全,QQ,硬件,软件,编程,教程,建站. u0 o. p# n* |/ W2 U- e
connection.setRequestProperty("Proxy-Authorization",encodedPassword);
% [# x9 L4 B/ |- \5 ]. q打造最好的电脑自学交流论坛
4 V9 T7 n2 [! x2 ?打造最好的电脑自学交流论坛: m2 O2 N; Q9 }+ U' J3 C
这段代码的思想是,您必须调整HTTP标头以发出用户信息。这是通过调用setRequestProperty()来实现的。这种方法允许您在发出请求之前处理HTTP标头。HTTP要求用base64对用户名和口令进行编码。幸运的是,有一组公用域API,它们将代您执行编码(请参阅参考资源部分)。 我爱电脑技术社区--打造最好的电脑技术自学交流平台: x, s8 `, \7 o# H
) s" p8 k/ ^7 v  r$ ]9 [
电脑,技术,IT,学习,交流,网络安全,QQ,硬件,软件,编程,教程,建站9 r& U( ~* E- o7 [% @; e  m! Y
如您所见,在Java应用程序中加入代理支持并不需要做多少工作。有了现在的知识,再做一点研究(您必须查明您的代理是如何处理您感兴趣的协议以及如何进行用户认证的),您就能用其他协议实现代理。

TOP

FTP代理 " q" h' u. A% ^2 P4 `, t6 p% @

5 r2 l' W$ A# ?+ m$ owww.520diannao.com
8 @  K- _1 X$ X+ x3 Swww.520diannao.comScottD.Taylor提出这个秘诀来处理FTP协议代理: 我爱电脑技术社区--打造最好的电脑技术自学交流平台: v+ g; f+ R6 J& G9 K

3 X* J" i  K: s) Hwww.520diannao.com
5 A/ v" D/ Q9 w8 U2 ?' e电脑,技术,IT,学习,交流,网络安全,QQ,硬件,软件,编程,教程,建站defaultProperties.put("ftpProxySet","true");
+ S# N) ?9 U1 z7 L  ~0 `4 s, M我爱电脑技术论坛, w: g. o' L' S! L+ S' o
defaultProperties.put("ftpProxyHost","proxy-host-name"); www.520diannao.com4 [+ F. ]3 v3 H& G8 `

7 X6 [6 |( x* m  [' I- V我爱电脑技术论坛defaultProperties.put("ftpProxyPort","85");
6 }. F2 f( b; t- ]+ @0 `: v我爱电脑技术社区--打造最好的电脑技术自学交流平台
7 J2 u  G8 I2 @% I5 u打造最好的电脑自学交流论坛
7 E* O6 C# v( A, |2 G我爱电脑技术论坛接下来您便可以通过以下代码使用"ftp"协议访问文件URL: www.520diannao.com% T. O" J  Z  e/ c9 O* g% X

6 v, u/ i6 i  w+ G+ x我爱电脑技术论坛www.520diannao.com" |, E* B( z& r* V9 J( w
URLurl=newURL("ftp://ftp.netscape.com/pub/navigator/3.04/windows/readme.txt");
. w, }' R* S) h  \3 S打造最好的电脑自学交流论坛电脑,技术,IT,学习,交流,网络安全,QQ,硬件,软件,编程,教程,建站- [% W' }$ m( i5 X- `& d1 m
1 Y  A# _" {. a/ N+ G; i: x
如果有人有使用其他网际协议代理的例子,我很想看看。
6 }9 _$ q2 }) b电脑,技术,IT,学习,交流,网络安全,QQ,硬件,软件,编程,教程,建站打造最好的电脑自学交流论坛( ^' J: z: S; f
我爱电脑技术论坛7 |3 x: k6 R: O3 `% }! ~% T
注意:代码示例(Example.java)仅在JDK1.1.4下测试过。 www.520diannao.com  p$ Q! @$ H2 L/ l( W

- |- I& Q% q# E/ T+ |/ h3 [6 c我爱电脑技术论坛
: D. |% j- t  p9 K后续技巧! 我爱电脑技术论坛) C/ V2 U) G9 H
我爱电脑技术社区--打造最好的电脑技术自学交流平台) i) F6 B& |4 N3 p- g0 j/ {% F! s
打造最好的电脑自学交流论坛8 y9 y* p, F7 N; E+ D$ T1 u. C. N" P
对于仍在使用JDK1.1.7(配合WebSphere3.0)的开发人员而言,将proxyHost和proxyPort设为系统属性不起作用;conn.getInputStream()或者返回连接超时,或者是找不到主机路径。但是,我使用接受Host和Port为参数的URL构造函数解决了这一问题(使用我的代理主机和端口):
/ k$ q: K- E+ S0 X0 r我爱电脑技术社区--打造最好的电脑技术自学交流平台打造最好的电脑自学交流论坛% c* q3 k) M+ ]

7 X& D7 B. B# i5 q电脑,技术,IT,学习,交流,网络安全,QQ,硬件,软件,编程,教程,建站publicURL(Stringprotocol,Stringhost,intport,Stringfile). : @/ d  L6 ?# A' e: k& ^

' u& d$ q9 M* k0 I& F我爱电脑技术论坛
7 R% s  L  Z8 o; h2 V  @  P电脑,技术,IT,学习,交流,网络安全,QQ,硬件,软件,编程,教程,建站借助用户名和口令进行认证的方法不起作用。应将"Basic"置于认证字符串的开头;例如:
+ r! J: O7 E$ U  S( g4 ?$ Z0 @3 iwww.520diannao.comwww.520diannao.com& L& K5 I5 s5 ?0 n7 S/ t
电脑,技术,IT,学习,交流,网络安全,QQ,硬件,软件,编程,教程,建站# [. ]9 U" k! K0 q' _! t' r, i' s
StringencodedPassword=base64Encode(password);
+ ~. W# w; ~$ j* @3 p: a9 T/ P打造最好的电脑自学交流论坛
' }4 _* |6 |6 D" Q电脑,技术,IT,学习,交流,网络安全,QQ,硬件,软件,编程,教程,建站打造最好的电脑自学交流论坛, A- T0 l/ N7 h) c& O
应该是:
, S2 w+ C4 F' ^: _0 f/ `1 \
+ c2 z9 f, J; A5 O+ h" A) S# j
+ K9 d0 z$ b- ?, _3 ~2 c我爱电脑技术社区--打造最好的电脑技术自学交流平台StringencodedPassword="Basic"+base64Encode(password); 我爱电脑技术论坛$ ]" s9 a6 J) s& W' M0 Z1 j6 q' {

* k# Z5 x7 {  o我爱电脑技术论坛! f2 w% {4 Q' J$ v  C) b4 w# Z
您也不必用一个单独的程序来进行64位编码。您可以使用sun.misc.BASE64Encoder()类。下面是完成这两处改动之后的代码:   s1 [- C# L! ^- L7 Q! _
www.520diannao.com( c7 E- x! x& }2 B4 c# B
www.520diannao.com1 L) H; v5 y: ?- b1 m
7 _/ x7 B* \0 K( d0 p. [; L
System.getProperties().put("proxySet","true");打造最好的电脑自学交流论坛" N1 B' \; {, |  L6 y
System.getProperties().put("proxyHost",proxyHost);电脑,技术,IT,学习,交流,网络安全,QQ,硬件,软件,编程,教程,建站9 Q+ x2 w1 z7 W) e/ e* Y& r6 i
System.getProperties().put("proxyPort",proxyPort);我爱电脑技术论坛; F. H- S* l# N
StringauthString="userid:password";7 }' j) q  v& j5 \/ F+ i3 p
Stringauth="Basic"+newsun.misc.BASE64Encoder电脑,技术,IT,学习,交流,网络安全,QQ,硬件,软件,编程,教程,建站/ H/ Q2 Y) ~0 v$ O0 t0 J
().encode(authString.getBytes());
  b- z% m/ W! f( S2 l7 [( y0 T, f我爱电脑技术社区--打造最好的电脑技术自学交流平台URLurl=newURL("http://java.sun.com/");
+ Y7 B' }& f+ i& ~: @. {打造最好的电脑自学交流论坛URLConnectionconn=url.openConnection();
! q: v, F( A# T' [. s: v  Q6 p打造最好的电脑自学交流论坛conn.setRequestProperty("Proxy-Authorization",auth);
1 A0 G4 `2 x$ @7 H0 V1 ?. gwww.520diannao.com 打造最好的电脑自学交流论坛; }( a* Q) `8 o
打造最好的电脑自学交流论坛7 d9 D7 N- @, ?/ C1 A3 E
我爱电脑技术社区--打造最好的电脑技术自学交流平台3 s/ f+ d5 O! R7 ]( |5 }3 H
下面是使用socks4代理服务器的方法: % I; ?" F- a/ E3 d' X$ m& H
www.520diannao.com9 x, E! k& d, f  b: F  t0 Q# y
我爱电脑技术社区--打造最好的电脑技术自学交流平台6 s, B% q! x  d# d$ p" }" ?! @$ D
System.getProperty("socksProxySet",true); 电脑,技术,IT,学习,交流,网络安全,QQ,硬件,软件,编程,教程,建站( C. h+ r* B; u  `

. W/ |3 l. g( s* D/ h: a我爱电脑技术论坛System.getProperty("socksProxyHost",proxyHostName); 我爱电脑技术论坛& a# H0 E$ P3 T( G6 u

& x; m/ I3 s* J; [) n1 ?www.520diannao.comSystem.getProperty("socksProxyPort",proxyPort);
7 [  [9 s5 x! F我爱电脑技术论坛电脑,技术,IT,学习,交流,网络安全,QQ,硬件,软件,编程,教程,建站! h3 @" ?; u0 p
UsuallytheproxyPortforSocks4isport1080 我爱电脑技术论坛+ Q1 g' S4 S  |+ V3 b

; N) G7 [# l1 {8 O2 q& d; C我爱电脑技术社区--打造最好的电脑技术自学交流平台
0 O1 u8 {9 p  |) c' Z5 p9 F我爱电脑技术论坛接下来您就可以用Socks4进行连接了。

TOP

不错的课程,给你顶下,学习了。

TOP

不错  学习了

TOP

发新话题