Skip to content

Commit 80235d6

Browse files
committed
Enable setting multiple headers in HttpOpener. (#456)
Uses new line (`\n`) as delimiter which is an invalid character in field values (see https://datatracker.ietf.org/doc/html/rfc7230#section-3.2.4).
1 parent fe7277c commit 80235d6

File tree

1 file changed

+12
-8
lines changed

1 file changed

+12
-8
lines changed

metafacture-io/src/main/java/org/metafacture/io/HttpOpener.java

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@
2929
import java.io.Reader;
3030
import java.net.URL;
3131
import java.net.URLConnection;
32+
import java.util.Arrays;
3233
import java.util.HashMap;
3334
import java.util.Map;
3435
import java.util.regex.Pattern;
@@ -45,7 +46,8 @@
4546
@FluxCommand("open-http")
4647
public final class HttpOpener extends DefaultObjectPipe<String, ObjectReceiver<Reader>> {
4748

48-
private static final Pattern HEADER_PATTERN = Pattern.compile(":\\s*");
49+
private static final Pattern HEADER_FIELD_SEPARATOR = Pattern.compile("\n");
50+
private static final Pattern HEADER_VALUE_SEPARATOR = Pattern.compile(":");
4951

5052
private static final String ENCODING_HEADER = "accept-charset";
5153

@@ -89,13 +91,15 @@ public void setEncoding(final String encoding) {
8991
* @param header request property line
9092
*/
9193
public void setHeader(final String header) {
92-
final String[] parts = HEADER_PATTERN.split(header, 2);
93-
if (parts.length == 2) {
94-
setHeader(parts[0], parts[1]);
95-
}
96-
else {
97-
throw new IllegalArgumentException("Invalid header: " + header);
98-
}
94+
Arrays.stream(HEADER_FIELD_SEPARATOR.split(header)).forEach(h -> {
95+
final String[] parts = HEADER_VALUE_SEPARATOR.split(h, 2);
96+
if (parts.length == 2) {
97+
setHeader(parts[0], parts[1].trim());
98+
}
99+
else {
100+
throw new IllegalArgumentException("Invalid header: " + h);
101+
}
102+
});
99103
}
100104

101105
/**

0 commit comments

Comments
 (0)