java??sample?codes??that?access?outer?internet?through?proxy?which?require?username?and?password?
use?inner?instead?of?extends?is?the?most?different?
網上也有一些文章但是大多數(shù)涉及帶有授權驗證的proxy都有問題,
主要問題就是出在對?Authenticator.setDefault的使用,以及base64編碼的問題上
代碼是最沒有二義性的文檔,實現(xiàn)原理不再解釋,請看代碼去體會。
如果轉載請注明代碼出處。
chimae@cnjsp.org
package?org.chimae.net;
import?java.io.BufferedReader;
import?java.io.IOException;
import?java.io.InputStream;
import?java.io.InputStreamReader;
import?java.net.Authenticator;
import?java.net.HttpURLConnection;
import?java.net.PasswordAuthentication;
import?java.net.URL;
/**
?*?@author?chimae@cnjsp.org
?*/
public?class?ProxyConnTest?{
????
????public?static?void?initProxy(String?host,?int?port,?final?String?username,
????????????final?String?password)?{
????????Authenticator.setDefault(new?Authenticator()?{
????????????protected?PasswordAuthentication?getPasswordAuthentication()?{
????????????????return?new?PasswordAuthentication(username,
????????????????????????new?String(password).toCharArray());
????????????}
????????});
????
????????System.setProperty(\"http.proxyType\",?\"4\");
????????System.setProperty(\"http.proxyPort\",?Integer.toString(port));
????????System.setProperty(\"http.proxyHost\",?host);
????????System.setProperty(\"http.proxySet\",?\"true\");
????}
????
????
????public?static?void?main(String[]?args)?throws?IOException?{
????????String?url?=?\"http://java.sun.com/\";
????????String?proxy?=?\"yourProxy\";
????????int?port?=8080;
????????String?username?=\"username\";
????????String?password?=\"password\";
????????String?curLine?=?\"\";
????????String?content?=?\"\";????????
????????URL?server?=?new?URL(url);
????????initProxy(proxy,port,username,password);
????????HttpURLConnection?connection?=?(HttpURLConnection)server.openConnection();
????????connection.connect();
????????InputStream?is?=?connection.getInputStream();
????????BufferedReader?reader?=?new?BufferedReader(new?InputStreamReader(is));
????????while?((curLine?=?reader.readLine())?!=?null)?{
????????????????content?+=?curLine;
????????????}
????????System.out.println(\"content=?\"?+?content);
????????is.close();
????}
}
use?inner?instead?of?extends?is?the?most?different?
網上也有一些文章但是大多數(shù)涉及帶有授權驗證的proxy都有問題,
主要問題就是出在對?Authenticator.setDefault的使用,以及base64編碼的問題上
代碼是最沒有二義性的文檔,實現(xiàn)原理不再解釋,請看代碼去體會。
如果轉載請注明代碼出處。
chimae@cnjsp.org
package?org.chimae.net;
import?java.io.BufferedReader;
import?java.io.IOException;
import?java.io.InputStream;
import?java.io.InputStreamReader;
import?java.net.Authenticator;
import?java.net.HttpURLConnection;
import?java.net.PasswordAuthentication;
import?java.net.URL;
/**
?*?@author?chimae@cnjsp.org
?*/
public?class?ProxyConnTest?{
????
????public?static?void?initProxy(String?host,?int?port,?final?String?username,
????????????final?String?password)?{
????????Authenticator.setDefault(new?Authenticator()?{
????????????protected?PasswordAuthentication?getPasswordAuthentication()?{
????????????????return?new?PasswordAuthentication(username,
????????????????????????new?String(password).toCharArray());
????????????}
????????});
????
????????System.setProperty(\"http.proxyType\",?\"4\");
????????System.setProperty(\"http.proxyPort\",?Integer.toString(port));
????????System.setProperty(\"http.proxyHost\",?host);
????????System.setProperty(\"http.proxySet\",?\"true\");
????}
????
????
????public?static?void?main(String[]?args)?throws?IOException?{
????????String?url?=?\"http://java.sun.com/\";
????????String?proxy?=?\"yourProxy\";
????????int?port?=8080;
????????String?username?=\"username\";
????????String?password?=\"password\";
????????String?curLine?=?\"\";
????????String?content?=?\"\";????????
????????URL?server?=?new?URL(url);
????????initProxy(proxy,port,username,password);
????????HttpURLConnection?connection?=?(HttpURLConnection)server.openConnection();
????????connection.connect();
????????InputStream?is?=?connection.getInputStream();
????????BufferedReader?reader?=?new?BufferedReader(new?InputStreamReader(is));
????????while?((curLine?=?reader.readLine())?!=?null)?{
????????????????content?+=?curLine;
????????????}
????????System.out.println(\"content=?\"?+?content);
????????is.close();
????}
}