package org.webpieces.httpclient;
import java.net.InetSocketAddress;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.webpieces.httpclient.api.HttpSocket;
import org.webpieces.httpclient.api.HttpResponseListener;
import org.webpieces.httpparser.api.common.Header;
import org.webpieces.httpparser.api.common.KnownHeaderName;
import org.webpieces.httpparser.api.dto.HttpChunk;
import org.webpieces.httpparser.api.dto.HttpRequest;
import org.webpieces.httpparser.api.dto.HttpRequestLine;
import org.webpieces.httpparser.api.dto.HttpResponse;
import org.webpieces.httpparser.api.dto.HttpUri;
import org.webpieces.httpparser.api.dto.KnownHttpMethod;
public class IntegColoradoEdu {
private static final Logger log = LoggerFactory.getLogger(IntegColoradoEdu.class);
public static void main(String[] args) {
boolean isHttp = false;
String host = "www.colorado.edu";
int port = 443;
if(isHttp)
port = 80;
HttpRequest req = createRequest(host);
log.info("starting socket");
ChunkedResponseListener listener = new ChunkedResponseListener();
HttpSocket socket = IntegGoogleHttps.createSocket(isHttp, host, port);
socket
.connect(new InetSocketAddress(host, port))
.thenAccept(p -> socket.send(req, listener))
.exceptionally(e -> reportException(socket, e));
}
private static Void reportException(HttpSocket socket, Throwable e) {
log.error("exception on socket="+socket, e);
return null;
}
private static class ChunkedResponseListener implements HttpResponseListener {
@Override
public void incomingResponse(HttpResponse resp, boolean isComplete) {
log.info("received resp="+resp+" iscomplete="+isComplete);
}
@Override
public void incomingChunk(HttpChunk chunk, boolean isLastChunk) {
log.info("received resp="+chunk+" last="+isLastChunk);
}
@Override
public void failure(Throwable e) {
log.error("failed", e);
}
}
private static HttpRequest createRequest(String host) {
// GET / HTTP/1.1
// Host: www.colorado.edu
// User-Agent: curl/7.43.0
// Accept: */*
HttpRequestLine requestLine = new HttpRequestLine();
requestLine.setMethod(KnownHttpMethod.GET);
requestLine.setUri(new HttpUri("/"));
HttpRequest req = new HttpRequest();
req.setRequestLine(requestLine);
req.addHeader(new Header(KnownHeaderName.HOST, host));
req.addHeader(new Header(KnownHeaderName.ACCEPT, "*/*"));
req.addHeader(new Header(KnownHeaderName.USER_AGENT, "webpieces/0.9"));
return req;
}
}