2011-02-15 13 views
1

我遇到了一個很奇怪的問題。我正在嘗試使用HTTP GET和幾個參數調用servlet(JSP)(http://mydomain.com/method?param1=test & param2 = 123)。如果我從瀏覽器或通過WGET在bash會話中調用它,它可以正常工作。但是,當我使用urlConnection或httpURLConnection在Java客戶端中完成相同的調用時,服務器將返回500錯誤。服務器僅在被Java客戶端使用urlConnection/httpUrlConnection調用時才返回500錯誤

我用盡了一切我已經在網上找到,包括:

urlConn.setRequestProperty("Accept-Language", "en-us,en;q=0.5"); 

沒有我嘗試過,但是,工作過。不幸的是,我沒有訪問我打電話的服務器,所以我看不到日誌。

以下是最新代碼:

private String testURLConnection() { 
String ret = ""; 

String url = "http://localhost:8080/TestService/test"; 
String query = "param1=value1&param2=value2"; 

try { 
    URLConnection connection = new URL(url + "?" + query).openConnection(); 
    connection.setRequestProperty("Accept-Charset", "UTF-8"); 
    connection.setRequestProperty("Accept-Language", "en-us,en;q=0.5"); 

    BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(connection.getInputStream())); 

    String line; 

    StringBuilder content = new StringBuilder(); 
    while ((line = bufferedReader.readLine()) != null) { 
     content.append(line + "\n"); 
    } 
    bufferedReader.close(); 
    metaRet = content.toString(); 
    log.debug(methodName + " return = " + metaRet); 
} catch (Exception ex) { 
    log.error("Exception: " + ex); 
    log.error("stack trace: " + getStackTrace(ex)); 
} 

return metaRet; 

}

任何幫助將不勝感激!

+0

你可以發佈你正在用來發送HTTP請求到服務器的所有相關代碼嗎? – sjr 2011-02-15 06:57:09

+0

感謝您的快速響應。我用代碼更新了我的原始發帖。 – user455889 2011-02-15 07:21:45

回答

1

不幸的是,我沒有訪問我打電話的服務器,所以我看不到日誌。

不幸的是,服務器日誌將是尋找什麼導致500內部錯誤信息的最佳位置。

在響應的主體中也可能有一些信息;例如一個HTML格式的錯誤頁面,包含錯誤信息和(如果你幸運的話)格式化的堆棧跟蹤。

如果不存在這種情況,您可能不得不求助於爲工作案例和不工作案例傾倒請求標頭,並嘗試弄清楚它們的不同之處。然後,通過反覆試驗消除這些差異,直到找到導致問題的那一個。


另一種看待這個問題的方式是服務器的錯誤,而不是客戶端的錯誤。服務器應該能夠處理客戶端拋出的任何請求。 500響應是說服務器不能。

但是,當然,說「這是服務器的錯」並不能幫助你解決問題。

0

我有同樣的問題,但幸運的是我有權訪問服務器日誌。這是服務器的碼頭配置問題。

的服務器將被賦予此異常: java.lang.IllegalStateException:形式太large1105723> 200000

此修復程序是在服務器端的配置碼頭。

在客戶端,如果您的服務器允許,您可以嘗試以application/www-x-formencoded以外的其他形式發送數據。

相關問題