From 17b12ca19b3dcc7fdad376a7489f65ab8d5a69c4 Mon Sep 17 00:00:00 2001 From: nlevitt Date: Tue, 1 Mar 2011 23:43:58 +0000 Subject: [PATCH] * HostsReport.java url-encode hosts (other than "dns:") in host report, in case of hostname containing whitespace or other unusual characters, which can happen --- .../archive/crawler/reporting/HostsReport.java | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/engine/src/main/java/org/archive/crawler/reporting/HostsReport.java b/engine/src/main/java/org/archive/crawler/reporting/HostsReport.java index 00dcd2ec..d1e47718 100644 --- a/engine/src/main/java/org/archive/crawler/reporting/HostsReport.java +++ b/engine/src/main/java/org/archive/crawler/reporting/HostsReport.java @@ -20,6 +20,8 @@ package org.archive.crawler.reporting; import java.io.PrintWriter; +import java.io.UnsupportedEncodingException; +import java.net.URLEncoder; import java.util.Map; import org.apache.commons.collections.Closure; @@ -33,6 +35,18 @@ import org.archive.modules.net.CrawlHost; */ public class HostsReport extends Report { + protected String fixup(String hostName) { + if ("dns:".equals(hostName)) { + return hostName; + } else { + try { + return URLEncoder.encode(hostName, "UTF-8"); + } catch (UnsupportedEncodingException e) { + throw new RuntimeException(e); + } + } + } + @Override public void write(final PrintWriter writer) { // TODO: use CrawlHosts for all stats; only perform sorting on @@ -47,7 +61,7 @@ public class HostsReport extends Report { writeReportLine(writer, count, stats.getBytesPerHost(entry.getValue()), - entry.getValue(), + fixup(entry.getValue()), host.getSubstats().getRobotsDenials(), host.getSubstats().getRemaining(), host.getSubstats().getNovelUrls(), @@ -67,7 +81,7 @@ public class HostsReport extends Report { writeReportLine(writer, host.getSubstats().getRecordedFinishes(), host.getSubstats().getTotalBytes(), - host.getHostName(), + fixup(host.getHostName()), host.getSubstats().getRobotsDenials(), host.getSubstats().getRemaining(), host.getSubstats().getNovelUrls(),