https://everleaf.blogspot.com/search/label/PHP

6/08/2019

Java class simple Http Post

Java class yang simple berguna untuk memproses http post request, untuk penggunaannya :

String protocol = "https://";
String url = "everleaf.blogspot.com";
int maxretry = 2;
String proxy = "0"; //ganti dengan ip:port jika ingin menggunakan socks5
String postdata = URLEncoder.encode("data1=foor&data2=bar&data3=foo", "UTF-8"); //encode ke urlencode

CurlPost curlpost = new CurlPost(protocol, url, url, maxretry, proxy);
curlpost.SetStart();
curlpost.SetHeader("User-Agent", "Mozilla Gecko");
curlpost.SetHeader("Cookie", "yourcookie=here");
curlpost.SetHeader("Content-Type", "application/x-www-form-urlencoded");
curlpost.SetHeader("Upgrade-Insecure-Requests", "1");
curlpost.SetPostData(postdata);
List<String> responsecurlpost = curlpost.SetConnect();
 
System.out.println("ResponseCode: " + responsecurlpost.get(0));
System.out.println("ResponseCookie: " + responsecurlpost.get(1));
System.out.println("ResponseUri: " + responsecurlpost.get(2));
System.out.println("ResponseContent: " + responsecurlpost.get(3));

Penjelasan untuk beberapa response dan type datanya :

(String) responsecurlpost.get(0) = Response Code
(String) responsecurlpost.get(1) = Response Cookie
(String) responsecurlpost.get(2) = Response Uri
(String) responsecurlpost.get(3) = Response Content

Dibawah ini kode java class untuk request http post, simpan dengan nama CurlPost.java :
import java.io.BufferedReader;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.CookieHandler;
import java.net.CookieManager;
import java.net.CookiePolicy;
import java.net.HttpCookie;
import java.net.HttpURLConnection;
import java.net.InetSocketAddress;
import java.net.MalformedURLException;
import java.net.Proxy;
import java.net.URL;
import java.nio.charset.StandardCharsets;
import java.security.KeyManagementException;
import java.security.NoSuchAlgorithmException;
import java.util.ArrayList;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.net.ssl.HostnameVerifier;
import javax.net.ssl.HttpsURLConnection;

public class CurlPost {
    private final String useragent = new RandomUA().Random();
    private HttpURLConnection curlpost;
    private InputStream curlpostinputstream;
    private OutputStream curlpostoutputstream;
    private int maxretry = 0;
    private int nowretry = 0;
    private String protocol;
    private String urlget;
    private String urlpost;
    private String postdata;
    private List<String> curlpostheaders = new ArrayList<>();
    private int responseCode = 0;
    private StringBuilder responseCookie = new StringBuilder();
    private String responseUri = "";
    private String responseData = "";
    private List<String> responseAll = new ArrayList<>();
    private boolean redirect = false;
    private String proxy = "0";
    private final CookieManager cm = new CookieManager();

    private List<String> CurlPostRetry(List<String> headers, String postdata) throws Exception{
        List<String> responseAllRetry = new ArrayList<>();
        if(nowretry <= maxretry){
            nowretry = nowretry + 1;
            Thread.sleep(5000);
            CurlPost curlpostretry = new CurlPost(protocol, urlget, urlpost, (maxretry-nowretry), proxy);
            curlpostretry.SetStart();
            if(headers.size() > 0){
                for(String headerkeyvalx:headers){
                    String[] headerkeyval = headerkeyvalx.split("Adelia");
                    curlpostretry.SetHeader(headerkeyval[0], headerkeyval[1]);
                }
            }
            curlpostretry.SetPostData(postdata);
            responseAllRetry = curlpostretry.SetConnect();
        }
        else{
            for(int i=0;i<=3;i++){
                if(i == 2){
                    responseAllRetry.add(protocol+urlpost);
                }
                else{
                    responseAllRetry.add("zero"+i+"MAXRETRY");
                }
            }
        }
        return responseAllRetry;
    }
    
    public CurlPost(String protocol, String urlget, String urlpost, int maxretry, String proxy) throws IOException, Exception{
        this.protocol = protocol;
        this.urlget = urlget;
        this.urlpost = urlpost;
        this.maxretry = maxretry;
        this.proxy = proxy;
        HostnameVerifier allHostsValid;
        try {
            allHostsValid = TrustedDomain.TrustMe();
            HttpsURLConnection.setDefaultHostnameVerifier(allHostsValid);
        } catch (NoSuchAlgorithmException | KeyManagementException ex) {
            Logger.getLogger(CurlGet.class.getName()).log(Level.SEVERE, null, ex);
        }
        cm.setCookiePolicy(CookiePolicy.ACCEPT_ALL);
        CookieHandler.setDefault(cm);
    }
    
    public void SetStart() throws MalformedURLException, IOException{
        if("0".equals(proxy) == false && proxy.contains(":")){
            String proxyAddress[] = proxy.split(":");
            Proxy sock5 = new Proxy(Proxy.Type.SOCKS, new InetSocketAddress(proxyAddress[0], Integer.parseInt(proxyAddress[1])));
            curlpost = (HttpURLConnection) new URL(protocol+urlpost).openConnection(sock5);
        }
        else{
            curlpost = (HttpURLConnection) new URL(protocol+urlpost).openConnection();
        }
        curlpost.setDoOutput(true);
        curlpost.setDoInput(true);
    }
    
    public void SetHeader(String var, String val){
        if((var.isEmpty() == false) && (val.isEmpty() == false)){
            curlpost.setRequestProperty(var, val);
            curlpostheaders.add(var+"Adelia"+val+"Adelia");
        }
    }
    
    public void SetPostData(String postdatabody){
        postdata = postdatabody;
    }
    
    public List<String> SetConnect() throws IOException, Exception{
        Thread.sleep(500);
        try{
            byte[] data = postdata.getBytes(StandardCharsets.UTF_8);
            curlpostoutputstream = curlpost.getOutputStream();
            curlpostoutputstream.write(data);
            curlpostoutputstream.flush();
            curlpostoutputstream.close();
            try{
                responseCode = curlpost.getResponseCode();
                if(responseCode != 0){
                    if(responseCode != HttpURLConnection.HTTP_OK){
                        if(responseCode == HttpURLConnection.HTTP_MOVED_TEMP ||
                            responseCode == HttpURLConnection.HTTP_MOVED_PERM||
                            responseCode == HttpURLConnection.HTTP_SEE_OTHER){
                            redirect = true;
                        }
                    }
                    if(redirect){
                        curlpost = (HttpURLConnection) new URL(curlpost.getHeaderField("Location")).openConnection();
                        if(curlpost.getRequestProperty("User-Agent") == null){
                            curlpost.addRequestProperty("User-Agent", useragent);
                        }
                        if(curlpost.getRequestProperty("Upgrade-Insecures-Request") == null){
                            curlpost.addRequestProperty("Upgrade-Insecures-Request", "1");
                        }
                        curlpost.setRequestMethod("GET");
                        responseCode = curlpost.getResponseCode();
                    }
                    responseUri = curlpost.getURL().toString();
                    List<HttpCookie> cookies = cm.getCookieStore().getCookies();
                    for (HttpCookie cookie : cookies) {
                        String tmpcookie = cookie.getName()+"="+cookie.getValue()+"; ";
                        if(responseCookie.toString().contains(tmpcookie) == false){
                            responseCookie.append(tmpcookie);
                        }
                    }
                    if(responseCode == HttpURLConnection.HTTP_OK ||
                        responseCode == HttpURLConnection.HTTP_CONFLICT || 
                        responseCode == HttpURLConnection.HTTP_MOVED_TEMP ||
                        responseCode == HttpURLConnection.HTTP_MOVED_PERM||
                        responseCode == HttpURLConnection.HTTP_SEE_OTHER ||
                        responseCode == HttpURLConnection.HTTP_NOT_FOUND || 
                        responseCode == HttpURLConnection.HTTP_FORBIDDEN ||
                        responseCode == HttpURLConnection.HTTP_PAYMENT_REQUIRED ||
                        responseCode == HttpURLConnection.HTTP_UNAVAILABLE ||
                        responseCode == HttpURLConnection.HTTP_UNAUTHORIZED ||
                        responseCode == HttpURLConnection.HTTP_NOT_ACCEPTABLE ||
                        responseCode == HttpURLConnection.HTTP_BAD_METHOD ||
                        responseCode == HttpURLConnection.HTTP_BAD_REQUEST ||
                        responseCode == HttpURLConnection.HTTP_INTERNAL_ERROR){
                        if(responseCode >= 200 && responseCode < 400){
                            curlpostinputstream = curlpost.getInputStream();
                        }
                        else{
                            curlpostinputstream = curlpost.getErrorStream();
                        }
                        try (BufferedReader buffer = new BufferedReader(new InputStreamReader(curlpostinputstream))) {
                            String line = null;
                            while((line = buffer.readLine()) != null){
                                responseData += line;
                            }
                        }
                        catch(java.lang.NullPointerException ex){
                            responseData = "notfound";
                        }
                        curlpost.disconnect();
                        responseAll.add(String.valueOf(responseCode));
                        responseAll.add(responseCookie.toString());
                        responseAll.add(responseUri);
                        responseAll.add(responseData);
                    }
                    else{
                        try {
                            responseAll = CurlPostRetry(curlpostheaders, postdata);
                        } catch (Exception ex) {
                            for(int i=0;i<=3;i++){
                                if(i == 2){
                                    responseAll.add(protocol+urlget);
                                }
                                else{
                                    responseAll.add("null"+i);
                                }
                            }
                        }
                    }
                }
                else{
                }
            }
            catch(javax.net.ssl.SSLProtocolException | java.net.ProtocolException | javax.net.ssl.SSLHandshakeException ex){
                protocol = "http://";
                responseAll = CurlPostRetry(curlpostheaders, postdata);
            }
            catch(java.net.ConnectException | java.net.SocketTimeoutException ex){
                responseAll = CurlPostRetry(curlpostheaders, postdata);
            }
            catch(java.net.SocketException ex){
                responseAll = CurlPostRetry(curlpostheaders, postdata);
            }
            catch(java.net.UnknownHostException | java.lang.NullPointerException | java.net.MalformedURLException ex){
                for(int i=0;i<=3;i++){
                    if(i == 2){
                        responseAll.add(protocol+urlget);
                    }
                    else{
                        responseAll.add("null"+i);
                    }
                }
            }
        }
        catch(java.net.ConnectException | java.net.SocketTimeoutException ex){
            responseAll = CurlPostRetry(curlpostheaders, postdata);
        }
        catch(java.net.SocketException ex){
            responseAll = CurlPostRetry(curlpostheaders, postdata);
        }
        catch(java.net.UnknownHostException | java.net.MalformedURLException ex){
            for(int i=0;i<=3;i++){
                    if(i == 2){
                        responseAll.add(protocol+urlget);
                    }
                    else{
                        responseAll.add("null"+i);
                    }
                }
        }
        System.out.println("[POST]["+responseAll.get(0)+"] "+responseAll.get(2)+"[RTT]["+nowretry+"] RESPONSE DATA : "+responseAll.get(3).length());
        cm.getCookieStore().removeAll();
        CookieHandler.setDefault(null);
        return responseAll;
    }
}

untuk bagian disable ssl verifikasi : TrustedDomain.java
untuk random useragent :  RandomUA.java
lainnya: Java class simple Http Get

No comments:

Post a Comment

Diharapkan berkomentar dengan sopan dan santun, terimakasih.