最近在做項目的過程中遇到了以下的問題,在跑下面這段代碼的時候:
url.openConnection().getInputStream();
跑出了一個連線逾時的異常,經過詳細的檢查,發現問題是因為我在區域網路
訪問Internet的資源的時候是通過Proxy 伺服器上網的,因此按照這個思路我修改了一下代碼果然串連到了外網資源。
url.openConnection(proxy).getInputStream();
與上面的相比只是多了一個構造的代理對象而已,經過測試可以串連到外網,代碼如下:
import java.io.IOException;import java.io.InputStream;import java.net.InetAddress;import java.net.InetSocketAddress;import java.net.MalformedURLException;import java.net.Proxy;import java.net.URL;/*本類用於測試Java URL對象通過代理訪問網路資源*/public class Urlconnection {/** * @param args */public static void main(String[] args) {// TODO Auto-generated method stubString urlString="http://baidu.com";String proxyIp="172.20.230.5";int Port=3128; try { /*構造Proxy對象,以適用於代理上網的方式*/ InetSocketAddress socketAddress=new InetSocketAddress( InetAddress.getByName(proxyIp),Port); Proxy proxy=new Proxy(Proxy.Type.HTTP,socketAddress); /*構造url對象*/URL url= new URL(urlString);/*測試是否能夠開啟串連,獲得輸入資料流,串連方式是直連方式*///InputStream inputStream=url.openConnection().getInputStream();/*下面用代理的方式進行串連,需要構造Proxy對象*/InputStream input=url.openConnection(proxy).getInputStream();if(input !=null){System.out.println("Connectioned");}} catch (MalformedURLException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}