[英]Server returns 500 error only when called by Java client using urlConnection/httpUrlConnection
我有一個非常奇怪的問題。 我正在嘗試使用HTTP GET和一些參數(http://mydomain.com/method?param1=test¶m2=123)調用servlet(JSP)。 如果我通過瀏覽器或在bash會話中通過WGET調用它,則可以正常工作。 但是,當我使用urlConnection或httpURLConnection在Java客戶端中進行完全相同的調用時,服務器返回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¶m2=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;
}
任何幫助將不勝感激!
不幸的是,我無權訪問正在呼叫的服務器,因此看不到日志。
不幸的是,服務器日志是查找引起500內部錯誤的信息的最佳位置。
響應的主體中可能還包含一些信息; 例如,包含錯誤消息的HTML格式錯誤頁面,以及(如果您幸運的話)格式化堆棧跟蹤。
如果沒有,您可能不得不轉儲針對有效案例和無效案例的請求標頭,並嘗試找出它們之間的區別。 然后,通過反復嘗試消除差異,直到找到導致問題的原因。
另一種看待這種情況的方式是服務器的問題,而不是客戶端的問題。 服務器應該能夠處理客戶端向它拋出的任何請求。 500響應表示服務器無法。
但是,當然,說“這是服務器的錯誤”並不能幫助您解決問題。
我有同樣的問題,但幸運的是我可以訪問服務器日志。 這是服務器的碼頭配置問題。
服務器將給出以下異常:java.lang.IllegalStateException:窗體太大1105723> 200000
此修復程序是在服務器端的碼頭配置中。
如果服務器允許,您可以從客戶端嘗試以application / www-x-formencoded以外的其他形式發送數據。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.