2015-10-21 25 views
0

我在vmware機器上啓動了bitnami的iso。 標準管理登錄和傳遞bitnami是: 登錄名:用戶, 通過:bitnami。在redmain中使用get請求失敗的HTTP

在身份驗證選項卡中選擇需要身份驗證,啓用REST Web服務並啓用JSONP支持。

任何機構都知道,爲什麼我會得到以下聲明? 對於任何幫助,我將非常感激。

我得到了一份聲明:

Exception in thread "main" java.lang.RuntimeException: Failed : HTTP 
error code : 401 at NetClientGet.main(NetClientGet.java:36) 
Java Result: 1 

我的代碼:

import java.io.BufferedReader; 
import java.io.BufferedWriter; 
import java.io.IOException; 
import java.io.InputStreamReader; 
import java.io.OutputStream; 
import java.io.OutputStreamWriter; 
import java.net.HttpURLConnection; 
import java.net.MalformedURLException; 
import java.net.URL; 

public class NetClientGet { 

    public static void main(String[] args) { 

     try { 
     URL url = new URL("http://192.168.0.78/issues.json?key=pjxjDvD9ez0Qm97iApka"); 

     HttpURLConnection conn = (HttpURLConnection) url.openConnection(); 
     conn.setRequestMethod("GET"); 
     conn.setRequestProperty("Accept", "application/json"); 
     conn.setDoOutput(true); 

     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(); 
     } 
    } 
} 

回答

0

HTTP狀態代碼401意味着你有一個身份驗證問題。這與你的代碼無關。

但是,對於錯誤的狀態代碼拋出RuntimeException很粗糙。

if (conn.getResponseCode() != 200) { 
    throw new RuntimeException("Failed : HTTP error code : " + conn.getResponseCode()); 
} 

也許你可以優雅地處理不同的場景。例如:

if (conn.getResponseCode() >= 300) { 
    // Something unexpected happened 
    System.out.println("Unexpected response from server"); 
    return // Stop here 
} 

編輯

對不起,我沒仔細看你的代碼。鑑於您獲得的狀態代碼,您似乎需要將HTTP身份驗證發送到您的服務器。它看起來像:

String username = "user" 
String password = "bitnami" 
String userPassword = username + ":" + password; 
String encoding = new sun.misc.BASE64Encoder().encode(userPassword.getBytes()); 

URL url = new URL("http://192.168.0.78/issues.json?key=pjxjDvD9ez0Qm97iApka"); 

HttpURLConnection conn = (HttpURLConnection) url.openConnection(); 
conn.setRequestProperty("Authorization", "Basic " + encoding); 
conn.setRequestMethod("GET"); 
conn.setRequestProperty("Accept", "application/json"); 

注:沒有的承諾,它會編譯/工作:)從這個SO線程採取

代碼:"How to handle HTTP authentication using HttpURLConnection?"

+0

我改變的URL網址URL =新的URL(的 「http://用戶:[email protected]/issues.json」);並且我得到了422錯誤:(。永遠不會結束的故事:((你有什麼想法嗎? – Karaban

+0

@Karaban)你是否想發送一個參數來獲取問題列表?因爲422意味着請求在語法上是正確的,但語義錯誤,一個缺失的參數不應該返回422,但我們永遠不會知道。 – basgys