2017-06-03 28 views
0

我想通過簡單的休息服務調用來消費rss feed。但我得到連接超時。 樣品RSS提要:https://www.yahoo.com/news/rss/是否有可能從restservice java使用rss feed?

我的代碼:

公共類的測試{

// http://localhost:8080/RESTfulExample/json/product/get 
public static void main(String a[]){ 

     try { 

     URL url = new URL("https://www.yahoo.com/news/rss/"); 
     HttpURLConnection conn = (HttpURLConnection) url.openConnection(); 

     conn.setRequestMethod("GET"); 
     conn.setRequestProperty("Accept", "application/json"); 
     //conn.setConnectTimeout(999999); 
/* 
     if (conn.getResponseCode() != 200) { 
      throw new RuntimeException("Failed : HTTP error code : " 
        + conn.getResponseCode()); 
     }*/ 

     BufferedReader br = new BufferedReader(new InputStreamReader(
      (conn.getInputStream()))); 

     String output; 
     System.out.println("Output from Server .... \n"); 
     while ((output = br.readLine()) != null) { 
      System.out.println(output); 
     } 

     conn.disconnect(); 

     } catch (MalformedURLException e) { 

     e.printStackTrace(); 

     } catch (IOException e) { 

     e.printStackTrace(); 

     } 

    } 

}

例外:

java.net.ConnectException:連接超時:連接at java.net.DualStackPlainSocketImpl.connect0(Native Method) 在java.net.DualStackPlainSocketImpl.socketConnect(DualStackPlainSocketImpl.java:79) 在java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:339) 在java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:200) 在java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:182) at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:172) at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392) at java。在sun.security.ssl.BaseSSLSocketImpl.connect(BaseSSLSocketImpl.java:160) at sun.net.NetworkClient.doConnect(NetworkClient.j AVA:180) 在sun.net.www.http.HttpClient.openServer(HttpClient.java:432) 在sun.net.www.http.HttpClient.openServer(HttpClient.java:527) 在sun.net。 www.protocol.https.HttpsClient。(HttpsClient.java:275) 在sun.net.www.protocol.https.HttpsClient.New(HttpsClient.java:371) 在sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection .getNewHttpClient(AbstractDelegateHttpsURLConnection.java:191) 在sun.net.www.protocol.http.HttpURLConnection.plainConnect(HttpURLConnection.java:933) 在sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(AbstractDelegateHttpsURLConnection.java :177) at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1301) at sun.net。 www.protocol.https.HttpsURLConnectionImpl.getInputStream(HttpsURLConnectionImpl.java:254) 在Test.main

這是錯誤的做法/代碼?如果你能建議更好的方法/代碼,那將會很棒。

+0

主要是你的代碼是缺少**服務器 - 客戶端頭字段值**當你做出基本的HTTP或HTTPS請求,看到的是https:/ /en.wikipedia.org/wiki/List_of_HTTP_header_fields獲得更好的細節,其次https://www.yahoo.com/news/rss/正在生成一個xml文件,所以最好不要將它與json相混淆 – ShayHaned

+0

你的代碼工作正常。正如@ShayHaned所說的,你必須從'application/json'中設置請求標頭爲'application/xml'。那麼你是否支持代理/防火牆? – harshavmb

+0

我修改爲application/xml。布依然是同樣的問題。 Regd代理,我不確定。如果是,我應該如何設置代理。當我在瀏覽器上點擊它時,同樣的uri工作正常。 – user12

回答

0

最後能夠通過設置代理來解決問題。這是爲我工作的代碼。

公共類的測試{

public static void main(String a[]) throws ClientProtocolException, IOException{ 
    HttpClient httpClient = new DefaultHttpClient(); 
    HttpHost proxy=new HttpHost("hostname", portnumber, "scheme"); // ex: hostname="your org proxy host" portnumber=8080 scheme="http" 
    httpClient.getParams().setParameter(ConnRouteParams.DEFAULT_PROXY,proxy); 

    HttpGet getRequest = new HttpGet(
     "https://www.yahoo.com/news/rss/"); 

    //getRequest.addHeader("accept", "application/xml"); 
    final RequestConfig config = RequestConfig.custom().setProxy(proxy).build(); 
    getRequest.setConfig(config); 


    HttpResponse response = httpClient.execute(getRequest); 

    /*if (response.getStatusLine().getStatusCode() != 200) { 
     throw new RuntimeException("Failed : HTTP error code : " 
      + response.getStatusLine().getStatusCode()); 
    }*/ 

    BufferedReader br = new BufferedReader(
        new InputStreamReader((response.getEntity().getContent()))); 

    String output; 
    System.out.println("Output from Server .... \n"); 
    while ((output = br.readLine()) != null) { 
     System.out.println(output); 
    } 

    httpClient.getConnectionManager().shutdown(); 

}

}