【问题标题】:http client head method against a website returns 503 but the site just runs fine针对网站的 http 客户端方法返回 503,但该网站运行良好
【发布时间】:2012-12-05 02:34:20
【问题描述】:

我们使用以下代码从我们的客户端应用程序与我们的网站通信,出于某种原因,我们总是返回 503 的状态代码。但是当我们从浏览器手动加载网站时,它只会加载 find。代码有什么问题吗?或者服务器端是否有任何可能导致此问题的特殊设置?

        // the head method
        httphead = new HttpHead(url);
        httphead.getParams().setParameter("http.socket.timeout", this.socketTimeout);
        httphead.getParams().setParameter("http.protocol.cookie-policy", CookiePolicy.IGNORE_COOKIES);

        HttpResponse response = this.httpClient.execute(httphead);
        statusCode = response.getStatusLine().getStatusCode();

【问题讨论】:

  • 503 表示“暂时不可用”。你又试过了吗?
  • 当您从浏览器手动加载时,会发出一个 GET 请求,因此它是一个不同的 HTTP 请求。服务器是什么?如果你切换到 HttpGet,你的 Java 客户端会发生什么?

标签: java http httpclient http-status-codes


【解决方案1】:

我将首先使用 tcpdump(或 windows 中的 winpcap)来获取数据包转储。然后您可以确切地看到这两个请求有何不同。如果您仍然无法解决问题,请在此处发布差异。

tcpdump -n -s 1000 -A port 80 and host {hostname}

【讨论】:

    【解决方案2】:

    这是由许多不同的事情引起的。基本上你需要自己做调查:

    • 检查您是否确实使用了正确的 URL ...

    • 检查服务器端日志。

    • 如果您在浏览器和服务之间有代理或反向代理,请检查请求到达多远...

    • 尝试捕获请求和回复消息(针对有效和无效的情况)并找出差异所在。

    • 尝试重现 HttpClient 库的工作(浏览器)案例;即使用相同的 URL 和相同的标头执行 GET。

    • 等等……

    【讨论】:

    • 结合这两个答案,查看wireshark中的HTTP请求,用你知道的最简单的http客户端复现它们:curl、wget等。试着找出是什么破坏了它:真的是GET吗vs HEAD 或 URL 的任何其他部分?协议、主机名、端口、路径、参数等……
    猜你喜欢
    • 2020-01-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-01
    • 1970-01-01
    • 2016-08-05
    相关资源
    最近更新 更多