in core/src/main/java/org/apache/stormcrawler/protocol/okhttp/HttpProtocol.java [524:616]
public Response intercept(Interceptor.Chain chain) throws IOException {
final long startFetchTime = System.currentTimeMillis();
final Connection connection = Objects.requireNonNull(chain.connection());
final String ipAddress = connection.socket().getInetAddress().getHostAddress();
final Request request = chain.request();
final int position = request.url().toString().indexOf(request.url().host());
final String u =
request.url().toString().substring(position + request.url().host().length());
final StringBuilder requestverbatim = new StringBuilder();
requestverbatim
.append(request.method())
.append(" ")
.append(u)
.append(" ")
.append(getNormalizedProtocolName(connection.protocol()))
.append("\r\n");
for (Pair<? extends String, ? extends String> header : request.headers()) {
requestverbatim
.append(header.getFirst())
.append(": ")
.append(header.getSecond())
.append("\r\n");
}
requestverbatim.append("\r\n");
final Response response = chain.proceed(request);
final StringBuilder responseverbatim = new StringBuilder();
/*
* Note: the protocol version between request and response may
* differ, a server may respond with HTTP/1.0 on a HTTP/1.1 request
*/
responseverbatim
.append(getNormalizedProtocolName(response.protocol()))
.append(" ")
.append(response.code())
.append(" ")
.append(response.message())
.append("\r\n");
for (Pair<? extends String, ? extends String> header : response.headers()) {
responseverbatim
.append(header.getFirst())
.append(": ")
.append(header.getSecond())
.append("\r\n");
}
responseverbatim.append("\r\n");
final byte[] encodedBytesResponse =
Base64.getEncoder()
.encode(
responseverbatim
.toString()
.getBytes(StandardCharsets.ISO_8859_1));
final byte[] encodedBytesRequest =
Base64.getEncoder()
.encode(
requestverbatim
.toString()
.getBytes(StandardCharsets.ISO_8859_1));
final StringBuilder protocols = new StringBuilder(response.protocol().toString());
final Handshake handshake = connection.handshake();
if (handshake != null) {
protocols.append(',').append(handshake.tlsVersion());
protocols.append(',').append(handshake.cipherSuite());
}
// returns a modified version of the response
return response.newBuilder()
.header(
ProtocolResponse.REQUEST_HEADERS_KEY,
new String(encodedBytesRequest, StandardCharsets.ISO_8859_1))
.header(
ProtocolResponse.RESPONSE_HEADERS_KEY,
new String(encodedBytesResponse, StandardCharsets.ISO_8859_1))
.header(ProtocolResponse.RESPONSE_IP_KEY, ipAddress)
.header(ProtocolResponse.REQUEST_TIME_KEY, Long.toString(startFetchTime))
.header(ProtocolResponse.PROTOCOL_VERSIONS_KEY, protocols.toString())
.build();
}