Where people come together to learn, code, and play. Custom-built HTTP server, site generator, and website from scratch using no external libraries. Goal is to be as minimalistic and fun as possible.
http://projectdivar.com
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
99 lines
3.5 KiB
99 lines
3.5 KiB
package requests;
|
|
|
|
import java.io.IOException;
|
|
import java.net.Authenticator;
|
|
import java.net.PasswordAuthentication;
|
|
import java.net.URI;
|
|
import java.net.URISyntaxException;
|
|
import java.net.http.HttpClient;
|
|
import java.net.http.HttpRequest;
|
|
import java.net.http.HttpResponse;
|
|
import java.net.http.HttpClient.Builder;
|
|
import java.net.http.HttpResponse.BodyHandlers;
|
|
import java.nio.file.Path;
|
|
import java.time.Duration;
|
|
|
|
import exceptions.FailedResponseException;
|
|
|
|
public class GETRequest{
|
|
String url;
|
|
String[] headers;
|
|
long timeout;
|
|
Path file;
|
|
String user="";
|
|
String pass="";
|
|
private HttpRequest req;
|
|
private HttpClient client;
|
|
/**
|
|
* @param file The file path info, use this for file downloads or set to null for standard text.
|
|
* @param timeout in milliseconds
|
|
* */
|
|
public GETRequest(String url, String username, String password, long timeout, Path file, String...headers){
|
|
this.url = url;
|
|
this.user=username;
|
|
this.pass=password;
|
|
this.headers = headers;
|
|
this.timeout = timeout;
|
|
this.file=file;
|
|
}
|
|
/**
|
|
* @param file The file path info, use this for file downloads or set to null for standard text.
|
|
* @param timeout in milliseconds
|
|
* */
|
|
public GETRequest(String url, long timeout, Path file, String...headers){
|
|
this(url,"","",timeout,file,headers);
|
|
}
|
|
/**
|
|
* @param timeout in milliseconds
|
|
* */
|
|
public GETRequest(String url, long timeout, String...headers){
|
|
this(url,timeout,null,headers);
|
|
}
|
|
public GETRequest(String url){
|
|
this(url,30000,null);
|
|
}
|
|
public HttpResponse<?> run() throws FailedResponseException {
|
|
build();
|
|
try {
|
|
if (file==null) {
|
|
return client.send(req,BodyHandlers.ofString());
|
|
} else {
|
|
return client.send(req,BodyHandlers.ofFile(file));
|
|
}
|
|
} catch (IOException | InterruptedException e) {
|
|
e.printStackTrace();
|
|
}
|
|
throw new FailedResponseException("No proper response returned. THIS SHOULD NOT BE HAPPENING!");
|
|
}
|
|
protected java.net.http.HttpRequest.Builder finalizeRequestPreBuild(java.net.http.HttpRequest.Builder requestBuild) throws FailedResponseException {
|
|
return requestBuild.GET();
|
|
}
|
|
protected Builder finalizeClientPreBuild(Builder clientBuild) {
|
|
return clientBuild;
|
|
}
|
|
protected void build(){
|
|
boolean AUTH_REQUIRED=user.length()>0&&pass.length()>0;
|
|
try {
|
|
java.net.http.HttpRequest.Builder requestBuild=HttpRequest.newBuilder(new URI(url))
|
|
.version(HttpClient.Version.HTTP_2)
|
|
.timeout(Duration.ofMillis(timeout));
|
|
if (headers!=null&&headers.length>0) {
|
|
requestBuild.headers(headers);
|
|
}
|
|
req = finalizeRequestPreBuild(requestBuild).build();
|
|
Builder clientBuild=HttpClient.newBuilder()
|
|
.followRedirects(HttpClient.Redirect.ALWAYS);
|
|
if (AUTH_REQUIRED) {
|
|
clientBuild.authenticator(new Authenticator() {
|
|
@Override
|
|
protected PasswordAuthentication getPasswordAuthentication() {
|
|
return new PasswordAuthentication(user,pass.toCharArray());
|
|
}
|
|
});
|
|
}
|
|
client = finalizeClientPreBuild(clientBuild).build();
|
|
} catch (URISyntaxException | FailedResponseException e) {
|
|
e.printStackTrace();
|
|
}
|
|
}
|
|
} |