Skip to content

Commit ba31bbb

Browse files
authored
#108 Replace custom HttpHeaders constants with the org.apache.http.HttpHeaders ones (#1587)
* Replace custom HttpHeaders constants with the org.apache.http.HttpHeaders ones * Remove org.apache.httpcomponents.core5.httpcore5 explicit dependency and maintain consistency using the implicit httpcore version came from org.apache.httpcomponents.httpclient * Replace hardcoded header keys to constants * Fix code formatting * Use ROOT Locale for toLowerCase()
1 parent 3a398de commit ba31bbb

23 files changed

Lines changed: 94 additions & 176 deletions

File tree

core/src/main/java/org/apache/stormcrawler/Metadata.java

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
import java.util.ConcurrentModificationException;
2626
import java.util.HashMap;
2727
import java.util.Iterator;
28+
import java.util.Locale;
2829
import java.util.Map;
2930
import java.util.Map.Entry;
3031
import java.util.Set;
@@ -89,7 +90,7 @@ public void putAll(Metadata m, String prefix) {
8990
* @return the first value for the key or null if it does not exist *
9091
*/
9192
public String getFirstValue(String key) {
92-
String[] values = md.get(key);
93+
String[] values = getValues(key);
9394
if (values == null) return null;
9495
if (values.length == 0) return null;
9596
return values[0];
@@ -109,14 +110,15 @@ public String[] getValues(String key, String prefix) {
109110
}
110111

111112
public String[] getValues(String key) {
112-
String[] values = md.get(key);
113+
if (key == null || key.isEmpty()) return null;
114+
String[] values = md.getOrDefault(key, md.get(key.toLowerCase(Locale.ROOT)));
113115
if (values == null) return null;
114116
if (values.length == 0) return null;
115117
return values;
116118
}
117119

118120
public boolean containsKey(String key) {
119-
return md.containsKey(key);
121+
return md.containsKey(key) || md.containsKey(key.toLowerCase(Locale.ROOT));
120122
}
121123

122124
public boolean containsKeyWithValue(String key, String value) {

core/src/main/java/org/apache/stormcrawler/bolt/FeedParserBolt.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@
3535
import java.util.Map;
3636
import java.util.TimeZone;
3737
import org.apache.commons.lang.StringUtils;
38+
import org.apache.http.HttpHeaders;
3839
import org.apache.storm.task.OutputCollector;
3940
import org.apache.storm.task.TopologyContext;
4041
import org.apache.storm.topology.OutputFieldsDeclarer;
@@ -48,7 +49,6 @@
4849
import org.apache.stormcrawler.parse.ParseFilters;
4950
import org.apache.stormcrawler.parse.ParseResult;
5051
import org.apache.stormcrawler.persistence.Status;
51-
import org.apache.stormcrawler.protocol.HttpHeaders;
5252
import org.apache.stormcrawler.protocol.ProtocolResponse;
5353
import org.apache.stormcrawler.util.ConfUtils;
5454
import org.slf4j.LoggerFactory;

core/src/main/java/org/apache/stormcrawler/bolt/FetcherBolt.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@
3838
import java.util.concurrent.atomic.AtomicLong;
3939
import java.util.regex.Pattern;
4040
import org.apache.commons.lang.StringUtils;
41+
import org.apache.http.HttpHeaders;
4142
import org.apache.storm.Config;
4243
import org.apache.storm.metric.api.MeanReducer;
4344
import org.apache.storm.metric.api.MultiCountMetric;
@@ -53,7 +54,6 @@
5354
import org.apache.stormcrawler.Constants;
5455
import org.apache.stormcrawler.Metadata;
5556
import org.apache.stormcrawler.persistence.Status;
56-
import org.apache.stormcrawler.protocol.HttpHeaders;
5757
import org.apache.stormcrawler.protocol.Protocol;
5858
import org.apache.stormcrawler.protocol.ProtocolFactory;
5959
import org.apache.stormcrawler.protocol.ProtocolResponse;

core/src/main/java/org/apache/stormcrawler/bolt/JSoupParserBolt.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@
3333
import java.util.Map;
3434
import java.util.stream.Stream;
3535
import org.apache.commons.lang.StringUtils;
36+
import org.apache.http.HttpHeaders;
3637
import org.apache.storm.metric.api.MultiCountMetric;
3738
import org.apache.storm.task.OutputCollector;
3839
import org.apache.storm.task.TopologyContext;
@@ -53,7 +54,6 @@
5354
import org.apache.stormcrawler.parse.ParseResult;
5455
import org.apache.stormcrawler.parse.TextExtractor;
5556
import org.apache.stormcrawler.persistence.Status;
56-
import org.apache.stormcrawler.protocol.HttpHeaders;
5757
import org.apache.stormcrawler.protocol.ProtocolResponse;
5858
import org.apache.stormcrawler.util.CharsetIdentification;
5959
import org.apache.stormcrawler.util.ConfUtils;

core/src/main/java/org/apache/stormcrawler/bolt/SimpleFetcherBolt.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@
3030
import java.util.concurrent.TimeUnit;
3131
import java.util.concurrent.atomic.AtomicInteger;
3232
import org.apache.commons.lang.StringUtils;
33+
import org.apache.http.HttpHeaders;
3334
import org.apache.storm.Config;
3435
import org.apache.storm.metric.api.IMetric;
3536
import org.apache.storm.metric.api.MeanReducer;
@@ -45,7 +46,6 @@
4546
import org.apache.stormcrawler.Constants;
4647
import org.apache.stormcrawler.Metadata;
4748
import org.apache.stormcrawler.persistence.Status;
48-
import org.apache.stormcrawler.protocol.HttpHeaders;
4949
import org.apache.stormcrawler.protocol.Protocol;
5050
import org.apache.stormcrawler.protocol.ProtocolFactory;
5151
import org.apache.stormcrawler.protocol.ProtocolResponse;

core/src/main/java/org/apache/stormcrawler/bolt/SiteMapParserBolt.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@
4343
import java.util.Map;
4444
import java.util.TimeZone;
4545
import org.apache.commons.lang.StringUtils;
46+
import org.apache.http.HttpHeaders;
4647
import org.apache.storm.metric.api.MeanReducer;
4748
import org.apache.storm.metric.api.ReducedMetric;
4849
import org.apache.storm.task.OutputCollector;
@@ -59,7 +60,6 @@
5960
import org.apache.stormcrawler.parse.ParseResult;
6061
import org.apache.stormcrawler.persistence.DefaultScheduler;
6162
import org.apache.stormcrawler.persistence.Status;
62-
import org.apache.stormcrawler.protocol.HttpHeaders;
6363
import org.apache.stormcrawler.util.ConfUtils;
6464
import org.slf4j.LoggerFactory;
6565

core/src/main/java/org/apache/stormcrawler/persistence/AdaptiveScheduler.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,10 +23,10 @@
2323
import java.util.Map;
2424
import java.util.Optional;
2525
import java.util.TimeZone;
26+
import org.apache.http.HttpHeaders;
2627
import org.apache.stormcrawler.Constants;
2728
import org.apache.stormcrawler.Metadata;
2829
import org.apache.stormcrawler.parse.filter.MD5SignatureParseFilter;
29-
import org.apache.stormcrawler.protocol.HttpHeaders;
3030
import org.apache.stormcrawler.util.ConfUtils;
3131
import org.slf4j.LoggerFactory;
3232

core/src/main/java/org/apache/stormcrawler/protocol/AbstractHttpProtocol.java

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,14 @@
1717
package org.apache.stormcrawler.protocol;
1818

1919
import crawlercommons.robots.BaseRobotRules;
20+
import java.time.ZoneId;
21+
import java.time.ZoneOffset;
22+
import java.time.ZonedDateTime;
23+
import java.time.format.DateTimeFormatter;
24+
import java.time.format.DateTimeParseException;
2025
import java.util.LinkedList;
2126
import java.util.List;
27+
import java.util.Locale;
2228
import org.apache.commons.lang.StringUtils;
2329
import org.apache.storm.Config;
2430
import org.apache.stormcrawler.proxy.ProxyManager;
@@ -30,6 +36,27 @@ public abstract class AbstractHttpProtocol implements Protocol {
3036

3137
private static final org.slf4j.Logger LOG = LoggerFactory.getLogger(AbstractHttpProtocol.class);
3238

39+
/**
40+
* Formatter for dates in HTTP headers, used to fill the "If-Modified-Since" request
41+
* header field, e.g.
42+
*
43+
* <pre>
44+
* Sun, 06 Nov 1994 08:49:37 GMT
45+
* </pre>
46+
*
47+
* See <a href= "https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1">sec. 3.3.1 in
48+
* RFC 2616</a> and <a href="https://tools.ietf.org/html/rfc7231#section-7.1.1.1">sec. 7.1.1.1
49+
* in RFC 7231</a>. The latter specifies the format defined in RFC 1123 as the
50+
* &quot;preferred&quot; format.
51+
*/
52+
private static final DateTimeFormatter HTTP_DATE_FORMATTER =
53+
DateTimeFormatter.ofPattern("EEE, dd MMM yyyy HH:mm:ss 'GMT'", Locale.ROOT)
54+
.withZone(ZoneId.of(ZoneOffset.UTC.toString()));
55+
56+
/** Formatter to parse ISO-formatted dates persisted in status index */
57+
private static final DateTimeFormatter ISO_INSTANT_FORMATTER =
58+
DateTimeFormatter.ISO_INSTANT.withZone(ZoneId.of(ZoneOffset.UTC.toString()));
59+
3360
private org.apache.stormcrawler.protocol.HttpRobotRulesParser robots;
3461

3562
protected boolean skipRobots = false;
@@ -189,4 +216,29 @@ private static String getAgentString(
189216

190217
return buf.toString();
191218
}
219+
220+
/**
221+
* Format an ISO date string as HTTP date used in HTTP headers, e.g.,
222+
*
223+
* <pre>
224+
* 1994-11-06T08:49:37.000Z
225+
* </pre>
226+
*
227+
* is formatted to
228+
*
229+
* <pre>
230+
* Sun, 06 Nov 1994 08:49:37 GMT
231+
* </pre>
232+
*
233+
* See {@link #HTTP_DATE_FORMATTER}
234+
*/
235+
protected static String formatHttpDate(String isoDate) {
236+
try {
237+
ZonedDateTime date = ISO_INSTANT_FORMATTER.parse(isoDate, ZonedDateTime::from);
238+
return HTTP_DATE_FORMATTER.format(date);
239+
} catch (DateTimeParseException e) {
240+
// not an ISO date
241+
return "";
242+
}
243+
}
192244
}

core/src/main/java/org/apache/stormcrawler/protocol/HttpHeaders.java

Lines changed: 0 additions & 101 deletions
This file was deleted.

core/src/main/java/org/apache/stormcrawler/protocol/HttpRobotRulesParser.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
import java.util.Locale;
2727
import java.util.Set;
2828
import org.apache.commons.lang.StringUtils;
29+
import org.apache.http.HttpHeaders;
2930
import org.apache.storm.Config;
3031
import org.apache.stormcrawler.Metadata;
3132
import org.apache.stormcrawler.util.ConfUtils;

0 commit comments

Comments
 (0)