【问题标题】:Illegal character in path at index 65 exception [ java ]索引 65 异常处路径中的非法字符 [java]
【发布时间】:2017-10-17 07:15:48
【问题描述】:

我正在尝试使用 HTTPGET apache 方法获取页面,但它抛出了这个异常:

Illegal character in path at index 65: http://doctorat.tuiasi.ro/Htm/Proiecte_POSDRU_17.02.2013/Proiecte europene.html

我知道那里的空间可能是问题的原因,但我正在尝试像这样过滤 url

String url=everyUrl.getUrl().replaceAll(" ", "%20");
                if (url.contains("http://")) {
                    Pattern allowedUrlCharacters = Pattern
                            .compile("([A-Za-z0-9_.~:/?\\#\\[\\]@!$&'()*+,;" + "=-]|%[0-9a-fA-F]{2})+");
                    Matcher matcher = allowedUrlCharacters.matcher(url);
                    if (matcher.find()) {
                        pushInFrontQueues(url);
                    }
                    // System.out.println(this.frontQueues.get(0).size());

                }
            }

我做错了什么?谁能帮帮我?

【问题讨论】:

  • 什么是完整的堆栈跟踪?异常发生在代码的哪一行?
  • 网址中不允许有空格。您在“Proiecte europene.html”中有一个
  • @RiaanNel 这是完整的堆栈跟踪
  • @litelite 我知道,但我已经测试了 id 并且不应该通过测试,但它确实

标签: java regex url exception-handling web-crawler


【解决方案1】:

问题是,您的正则表达式正在找到一个有效的字符串。事实上,它正在寻找两个有效的字符串。看看this 看看我的意思。它找到了两个匹配的组。

您需要确保仅在整个字符串匹配时才匹配。你可以用^$包围你的正则表达式,就像这样:

"^([A-Za-z0-9_.~:/?\\#\\[\\]@!$&'()*+,;" + "=-]|%[0-9a-fA-F]{2})+$"

但是,此模式可能会匹配您不想要的内容,例如 something%2else。要只允许有效的百分比编码,您可能需要这样的东西:

"^(%[0-9a-fA-F]{2}|[^%][A-Fa-f0-9]|[G-Zg-z_.~:/?\\#\\[\\]@!$&'()*+,;=-])+$"

【讨论】:

  • 抱歉,我不知道为什么我不尝试修复正则表达式。我更新了答案。
  • 为答案添加了一个更好的正则表达式。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-26
  • 2013-06-27
  • 2022-12-17
  • 2019-06-28
相关资源
最近更新 更多