我有一个非常奇怪的问题。我正在尝试使用HTTP GET和一些参数调用servlet(JSP)(http://mydomain.com/method?param1=test¶m2=123)。如果我在浏览器中通过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;
}
非常感谢任何帮助!
答案 0 :(得分:1)
不幸的是,我无法访问我正在呼叫的服务器,所以我看不到日志。
不幸的是,服务器日志将是查找导致500内部错误的信息的最佳位置。
答复正文中可能还有一些信息;例如一个HTML格式的错误页面包含和错误消息,并且(如果幸运的话)是一个格式化的堆栈跟踪。
如果没有这种情况,您可能不得不求助于转移有效案例的请求标头和不起作用的案例,并试图弄清楚它们的不同之处。然后,通过反复试验消除差异,直到找到导致问题的那个。
另一种看待这个问题的方法是它是服务器的错,而不是客户端的错。服务器应该能够处理客户端抛出的任何请求。 500响应是说服务器不能。
但是当然,说“这是服务器的错”并没有帮助你解决问题。
答案 1 :(得分:0)
我遇到了同样的问题,但幸运的是我可以访问服务器日志。这是服务器的jetty配置的问题。
服务器将提供此异常: java.lang.IllegalStateException:Form too large1105723> 200000
此修复程序位于服务器端的jetty配置中。
从客户端,如果服务器允许,您可以尝试以application / www-x-formencoded之外的其他形式发送数据。