【问题标题】:JSoup error 403 when trying to read the contents of a directory on my website尝试读取我网站上目录的内容时出现 JSoup 错误 403
【发布时间】:2014-06-28 22:10:09
【问题描述】:

线程“主”org.jsoup.HttpStatusException 中的异常:获取 URL 的 HTTP 错误。状态=403,URL=(站点) 在 org.jsoup.helper.HttpConnection$Response.execute(HttpConnection.java:449) 在 org.jsoup.helper.HttpConnection$Response.execute(HttpConnection.java:465) 在 org.jsoup.helper.HttpConnection$Response.execute(HttpConnection.java:424) 在 org.jsoup.helper.HttpConnection.execute(HttpConnection.java:178) 在 org.jsoup.helper.HttpConnection.get(HttpConnection.java:167) 在 plan.URLReader.main(URLReader.java:21)

大家好!

我一直在寻找一种在我的网站上为我正在开发的应用程序读取目录的方法。

如果我对其进行硬编码,我可以自己读取文件并使用它们,但是如果我尝试从目录中获取文件列表,则会收到此错误。

我尝试了几种方法,但这是我目前正在使用的代码。

String url = ""//(出于隐私考虑已删除网站); print("正在获取 %s...", url);

    Document doc = Jsoup.connect(url).userAgent("Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.153 Safari/537.36").get();
    Elements links = doc.select("a[href]");
    Elements media = doc.select("[src]");
    Elements imports = doc.select("link[href]");

... ... ...

现在,如果我使用 www.google.com/ 中的主站点,它会读取链接。问题是我想要一个目录,如 www.google.com/something/something/...

当我为我的网站尝试时,我收到了这个错误。

知道为什么我可以访问我的主站点,但不能访问其中的目录吗?

我还注意到末尾需要“/”。

只是好奇我是否错过了什么,或者需要以其他方式做某事?

感谢您的宝贵时间。

【问题讨论】:

    标签: directory jsoup http-status-code-403 virtual-directory


    【解决方案1】:
    String mylink = "http://www.imdb.com/search/title?genres=action";
    
    Connection connection = Jsoup.connect(mylink);
    connection.userAgent("Mozilla/5.0");
    Document doc = connection.get();
    
    //Elements elements = doc.body().select("tr.even detailed");
    Elements elements = doc.getElementsByClass("results");
    
    System.out.println(elements.toString());
    

    【讨论】:

      【解决方案2】:

      这可能是服务器配置的问题(或故意尝试阻止访问),而不是您的应用程序。来自 http-status-code-403 标签的标签 wiki 摘录:

      403 或“Forbidden”错误消息是一个 HTTP 标准响应代码,表明该请求是合法且可以理解的,但服务器拒绝响应该请求。

      来自tag wiki itself

      由于授权问题或与请求相关的其他限制,Web 服务器可能会返回 403 Forbidden。文件权限、缺乏加密以及达到的最大用户数(以及其他)都可能是 403 响应的原因。

      如果目标站点试图阻止屏幕抓取,另一种可能性是无法识别的用户代理字符串,但您将用户代理字符串设置为您从实际浏览器获得的(我假设),所以这不应该是原因。

      如果您希望获取常规(HTML)网页,或者在目录中不存在 index.html 时服务器生成的特殊“目录列表”页面,您的问题并不清楚。如果是后者,请注意许多服务器禁用了这些列表,以避免泄露目录中未从网站本身链接到的文件的名称。同样,这是一个服务器配置问题,不是您的应用程序可以解决的问题。

      【讨论】:

      • 非常感谢您。所以我可以很好地读取文件并且服务器没有问题,但是我不能查看目录?我尝试通过网络查看它,但我也确实遇到了错误。应用程序“WEB SITE”中的服务器错误 Internet 信息服务 7.5 错误摘要 HTTP 错误 403.14 - 禁止 Web 服务器配置为不列出此目录的内容。详细错误信息 Module DirectoryListingModule Notification ExecuteRequestHandler Handler StaticFile Error Code 0x00000000 Requested URL Physical Path Logon Method Anonymous Logon User Anonymous
      • 是的。它就在响应中:“Web 服务器配置为不列出此目录的内容。”当您的浏览器收到响应时,您的 Jsoup 应用程序也会收到响应。
      • 抱歉,当我发布答案时,我并不是要在那里提问,哈哈....然后它列出了“最可能的原因”。现在我对服务器配置知之甚少(我可以全部查看)但是有没有办法让我访问它而不允许其他人通过浏览器做同样的事情,或者我是怎么做的?似乎它是作为“匿名”访问的,所以我很好奇是否有办法让我先登录或其他什么???再次感谢您的帮助!
      • 我也明白了 如果您不想启用目录浏览,请确保配置了默认文档并且该文件存在。使用 IIS 管理器启用目录浏览。打开 IIS 管理器。在功能视图中,双击目录浏览。在目录浏览页面的操作窗格中,单击启用。验证站点或应用程序配置文件中的 configuration/system.webServer/directoryBrowse@enabled 属性是否设置为 true。看来如果我这样做了,它就会对所有人开放,但这可能不是什么大不了的事,因为没有人会真正知道路径在哪里。
      • 您可以使用 HTTP 基本身份验证(安全性低但配置简单),或 SSL/TLS 客户端证书身份验证(安全性高但实施难度大)。如何配置您的服务器以使用这些是他们自己的问题,可能比在 Stack Overflow 上更适合(或已经问过!)Server Fault 或 Webmasters.SE。
      【解决方案3】:

      其中一个可能的原因是无法从 Java 代码访问使用代理连接的外部网站。

      System.setProperty("http.proxyHost", "<<proxy host>>"); 
      System.setProperty("http.proxyPort", "<<proxy port>>");
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-02-11
        • 2022-01-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-03-07
        相关资源
        最近更新 更多