【问题标题】:Server returns 500 error only when called by Java client using urlConnection/httpUrlConnection仅当 Java 客户端使用 urlConnection/httpUrlConnection 调用服务器时才返回 500 错误
【发布时间】:2011-02-15 06:55:00
【问题描述】:

我遇到了一个非常奇怪的问题。我正在尝试使用 HTTP GET 和一些参数 (http://mydomain.com/method?param1=test&param2=123) 调用 servlet (JSP)。如果我从浏览器或通过 bash 会话中的 WGET 调用它,它工作正常。但是,当我在 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;

}

任何帮助将不胜感激!

【问题讨论】:

  • 您能否发布所有用于向服务器发送 HTTP 请求的相关代码?
  • 感谢您的快速回复。我用代码更新了我原来的帖子。
  • 这是服务器端错误,请在程序中使用参数打印您的请求 URL 并将其粘贴到浏览器中。您可能没有使用正确的查询字符串。
  • 嗨 Nishant - 感谢您的回复。我已经做到了,并且 URL 工作正常。
  • 这可能是由于 URLConnection 发送了一个无效的 Accept 标头字段 - 尝试使用 setReqquestProperty("Accept", "/"); 覆盖它;

标签: java http httpurlconnection urlconnection


【解决方案1】:

很遗憾,我无法访问我正在调用的服务器,所以我看不到日志。

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

响应的正文中也可能有一些信息;例如包含错误消息和(如果幸运的话)格式化堆栈跟踪的 HTML 格式错误页面。

如果没有这一点,您可能不得不针对有效和无效的情况转储请求标头,并尝试找出它们的不同之处。然后,通过反复试验消除差异,直到找到导致问题的原因。


另一种看法是,这是服务器的错,而不是客户端的错。服务器应该能够处理客户端向其抛出的任何请求。 500 响应表示服务器不能。

当然,说“这是服务器的错”并不能帮助您解决问题。

【讨论】:

  • 谢谢,斯蒂芬 - 我担心这可能需要。
【解决方案2】:

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

服务器会给出这个异常: java.lang.IllegalStateException: Form too large1105723>200000

此修复位于服务器端的码头配置中。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-05-14
    • 1970-01-01
    • 2020-05-10
    • 2020-08-27
    • 2016-09-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多