All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.cats.https.CHttpRequest Maven / Gradle / Ivy

package com.cats.https;

import com.cats.common.collections.CList;
import com.cats.common.json.CJsonUtil;
import org.apache.http.HttpEntity;
import org.apache.http.NameValuePair;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.entity.ContentType;
import org.apache.http.entity.StringEntity;
import org.apache.http.message.BasicNameValuePair;

import javax.ws.rs.core.HttpHeaders;
import javax.ws.rs.core.UriBuilder;
import java.net.URI;
import java.util.Base64;
import java.util.List;
import java.util.Map;

public class CHttpRequest {
    private final CList queryParameters = new CList<>();
    private final CSession session;
    private final URI targetURL;
    private HttpEntity entity;

    public CHttpRequest(String targetURL) {
        this(UriBuilder.fromUri(targetURL).build());
    }

    public CHttpRequest(URI targetURL) {
        this(null, targetURL);
    }

    public CHttpRequest(CSession session, String targetURL) {
        this(session, UriBuilder.fromUri(targetURL).build(), new CList<>());
    }

    public CHttpRequest(CSession session, URI targetURL) {
        this(session, targetURL, new CList<>());
    }

    public CHttpRequest(String targetURL, List headers) {
        this(null, UriBuilder.fromUri(targetURL).build(), headers);
    }

    public CHttpRequest(URI targetURL, List headers) {
        this(null, targetURL, headers);
    }

    public CHttpRequest(CSession session, String targetURL, List headers) {
        this(session, UriBuilder.fromUri(targetURL).build(), headers);
    }

    public CHttpRequest(CSession session, URI targetURL, List headers) {
        this.session = session == null ? new CBasicSession() : session;
        this.targetURL = targetURL;
        if (headers != null) {
            for (NameValuePair header : headers) {
                this.session.addHeader(header.getName(), header.getValue());
            }
        }
        this.session.addDefaultHeaders();
    }

    public CSession getSession() {
        return session;
    }

    public URI getTargetURL() {
        return targetURL;
    }

    public  T setBasicCredentialsProvider(String username, String password) {
        String userpass = String.format("%s:%s", username, password);
        session.addHeader(HttpHeaders.AUTHORIZATION, "Basic " + Base64.getEncoder().encodeToString(userpass.getBytes()));
        return (T) this;
    }

    public List getQueryParameters() {
        return queryParameters;
    }

    public  T addQueryParameter(String name, Object value) {
        this.queryParameters.add(new BasicNameValuePair(name, value.toString()));
        return (T) this;
    }

    public HttpEntity getEntity() {
        return entity;
    }

    public  T setEntity(HttpEntity entity) {
        this.entity = entity;
        return (T) this;
    }

    public  T setStringEntity(String string, ContentType contentType) {
        this.entity = new StringEntity(string, contentType);
        return (T) this;
    }

    public  T setUrlEncodedFormEntity(List entities) {
        try {
            this.entity = new UrlEncodedFormEntity(entities);
            return (T) this;
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }

    public  T setUrlEncodedFormEntity(Map entities) {
        try {
            this.entity = new UrlEncodedFormEntity(new CList<>(entities.keySet()).mapToList(s -> new BasicNameValuePair(s, entities.get(s))));
            return (T) this;
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }

    @Override
    public String toString() {
        return "CHttpRequest {\n" +
                "queryParameters: " + queryParameters +
                ",\nsession: " + CJsonUtil.toString(session) +
                ",\ntargetURL: '" + targetURL + '\'' +
                ",\nentity: " + entity +
                '}';
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy