仅当Java客户端使用urlConnection / httpUrlConnection调用时,服务器才会返回500错误

时间:2011-02-15 06:55:00

标签: java http httpurlconnection urlconnection

我有一个非常奇怪的问题。我正在尝试使用HTTP GET和一些参数调用servlet(JSP)(http://mydomain.com/method?param1=test&param2=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&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;

}

非常感谢任何帮助!

2 个答案:

答案 0 :(得分:1)

  

不幸的是,我无法访问我正在呼叫的服务器,所以我看不到日志。

不幸的是,服务器日志将是查找导致500内部错误的信息的最佳位置。

答复正文中可能还有一些信息;例如一个HTML格式的错误页面包含和错误消息,并且(如果幸运的话)是一个格式化的堆栈跟踪。

如果没有这种情况,您可能不得不求助于转移有效案例的请求标头和不起作用的案例,并试图弄清楚它们的不同之处。然后,通过反复试验消除差异,直到找到导致问题的那个。


另一种看待这个问题的方法是它是服务器的错,而不是客户端的错。服务器应该能够处理客户端抛出的任何请求。 500响应是说服务器不能。

但是当然,说“这是服务器的错”并没有帮助你解决问题。

答案 1 :(得分:0)

我遇到了同样的问题,但幸运的是我可以访问服务器日志。这是服务器的jetty配置的问题。

服务器将提供此异常: java.lang.IllegalStateException:Form too large1105723> 200000

此修复程序位于服务器端的jetty配置中。

从客户端,如果服务器允许,您可以尝试以application / www-x-formencoded之外的其他形式发送数据。