【问题标题】:Server returned HTTP response code 503 for URL服务器返回 URL 的 HTTP 响应代码 503
【发布时间】:2016-02-24 00:03:04
【问题描述】:

我可以访问网站kissmanga.com,但我无法通过程序访问它。我修复了之前遇到的错误 403,但现在我收到错误 503。

    URL url = new URL("http://kissmanga.com/");
    System.setProperty("http.agent", "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1500.29 Safari/537.36"); 
    BufferedReader bf = new BufferedReader(new InputStreamReader(url.openStream()));

    String str;
    while((str = bf.readLine()) != null){
        System.out.println(str);
    }


 Error that I get:
Exception in thread "main" java.io.IOException: Server returned HTTP response code: 503 for URL: http://kissmanga.com/
at sun.net.www.protocol.http.HttpURLConnection.getInputStream0(Unknown Source)
at sun.net.www.protocol.http.HttpURLConnection.getInputStream(Unknown Source)
at java.net.URL.openStream(Unknown Source)
at KissManga.main(KissManga.java:10)

好的,这段代码可以解决一个烦人的小问题。我没有得到完整的 html,但只有 2/3。

    HtmlUnitDriver driver = new HtmlUnitDriver();
    driver.get("http://kissmanga.com/");
    Thread.sleep(5000);
    System.out.println(driver.getPageSource());
    driver.quit();

【问题讨论】:

标签: java url


【解决方案1】:

您不会通过这种方式获得任何数据,因为网站会检查是否启用了 Javascript。

您应该尝试可以模拟浏览器行为的工具。例如,通过Selenium Htmlunit Driver获取页面源代码:

    HtmlUnitDriver drv = new HtmlUnitDriver(BrowserVersion.FIREFOX_38);
    drv.setJavascriptEnabled(true);
    drv.get("http://kissmanga.com/");
    drv.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
    System.out.println(drv.getPageSource());

【讨论】:

  • 这段代码对你有用吗?因为我收到错误,我错过了一个类 com/gargoylesoftware.../RefreshHandler
  • 您需要将 Selenium 依赖的库添加到您的项目中。如果您使用的是 Maven,上面的链接就足够了。如果您不是,请从official site 下载驱动程序。可以参考this教程。
  • 感谢您的回复,但我不知道这是否可行,因为其他人评论网站使用 CloudFlare...不过我稍后仍会尝试。
  • 嗨,伙计,我刚刚尝试了您的建议,我必须说它实际上几乎没有问题。在你的 drv.get 和 system.out 之间的代码中,我添加了 Thread.sleep(5000);,我得到了页面 html。但是缺少 1/3 的 html。例如,如果我加载kissmanga.com/Manga/Honey-MEGURO-Amu,它将获得完整的 html,但只是 Kissmanga.com 不会。
  • 您可以尝试使用 ChromeDriver 进行更精确的抓取,参见this 示例。
【解决方案2】:

错误503表示服务器可达,但返回错误状态码

503 表示“服务不可用”

可能服务器暂时出现问题或服务器因某种原因拒绝了您的请求

【讨论】:

  • 有办法解决吗?
  • 我不知道为什么服务器会发送错误代码,但它可能是服务器端的。服务器可能需要一些额外的 http 标头来服务请求。也许您可以尝试使用库来执行 http 请求,例如 async-http-client :github.com/AsyncHttpClient/async-http-client
【解决方案3】:

这是因为该网站似乎使用 Cloudflare。 您可以知道您何时访问该网站并获得“请稍候,我们正在检查您的浏览器”

503 = HTTP 503 服务不可用

这是 Cloudflare 告诉您在确保您不是 DDOS 的同时坚持下去。

您需要对解析器进行编码以查看正文并等待重定向,或者自己手动访问它。

【讨论】:

    猜你喜欢
    • 2014-02-22
    • 2023-03-17
    • 2014-08-09
    • 2013-09-12
    • 1970-01-01
    • 1970-01-01
    • 2011-04-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多