org.wso2.appfactory.integration.test.utils.external.HttpHandler.java Source code

Java tutorial

Introduction

Here is the source code for org.wso2.appfactory.integration.test.utils.external.HttpHandler.java

Source

/*
*  Copyright (c) 2005-2015, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
*
*  WSO2 Inc. licenses this file to you under the Apache License,
*  Version 2.0 (the "License"); you may not use this file except
*  in compliance with the License.
*  You may obtain a copy of the License at
*
*    http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied.  See the License for the
* specific language governing permissions and limitations
* under the License.
*/

package org.wso2.appfactory.integration.test.utils.external;

import org.apache.axis2.transport.http.HTTPConstants;
import org.apache.commons.httpclient.HttpStatus;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.ResponseHandler;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.client.methods.HttpPut;
import org.apache.http.impl.client.DefaultHttpClient;

import javax.net.ssl.HostnameVerifier;
import javax.net.ssl.HttpsURLConnection;
import javax.net.ssl.SSLSession;
import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;

/**
 * This class is use as a http client
 *
 */
public class HttpHandler {

    static {
        HttpsURLConnection.setDefaultHostnameVerifier(new HostnameVerifier() {
            public boolean verify(String hostname, SSLSession session) {
                if (hostname.equals("localhost"))
                    return true;
                return false;
            }
        });
    }

    /**
     * This method is use get a html file for given url
     *
     * @param url
     *          Web page url
     *
     * @return response
     *
     * @throws  java.io.IOException
     *            Throws this when failed to retrieve web page
     */
    public static String getHtml(String url) throws IOException {
        HttpClient httpclient = new DefaultHttpClient();
        HttpGet httpget = new HttpGet(url);
        HttpResponse response = httpclient.execute(httpget);
        HttpEntity entity = response.getEntity();
        InputStream content = entity.getContent();
        BufferedReader in = new BufferedReader(new InputStreamReader(content));
        StringBuffer responseBuffer = new StringBuffer();
        String line = "";
        while ((line = in.readLine()) != null) {
            responseBuffer.append(line);
        }
        return responseBuffer.toString();
    }

    /**
     * This method is used to retrieve the redirection location from response header
     * as the request will results in either 301 or 302 status code.
     * @param url
     * @return
     * @throws IOException
     */
    public static String getRedirectionUrl(String url) throws IOException {
        HttpClient httpclient = new DefaultHttpClient();
        HttpPost httpPost = new HttpPost(url);
        HttpResponse response = httpclient.execute(httpPost);
        final int statusCode = response.getStatusLine().getStatusCode();
        if (statusCode == HttpStatus.SC_MOVED_PERMANENTLY || statusCode == HttpStatus.SC_MOVED_TEMPORARILY) {
            return response.getFirstHeader(HTTPConstants.HEADER_LOCATION).getValue();
        }
        return null;
    }

    /**
     * This method is use get a html file for given url
     *
     * @param url
     *          Web page url
     *
     * @return response
     *
     * @throws  java.io.IOException
     *            Throws this when failed to retrieve web page
     */

    /**
     * This method is used to do a https post request
     *
     * @param url
     *           request url
     *
     * @param payload
     *            Content of the post request
     *
     * @param sessionId
     *            sessionId for authentication
     *
     * @param contentType
     *            content type of the post request
     *
     * @return response
     *
     * @throws  java.io.IOException
     *             - Throws this when failed to fulfill a https post request
     */
    public String doPostHttps(String url, String payload, String sessionId, String contentType) throws IOException {
        URL obj = new URL(url);

        HttpsURLConnection con = (HttpsURLConnection) obj.openConnection();
        //add reuqest header
        con.setRequestMethod("POST");
        if (!sessionId.equals("")) {
            con.setRequestProperty("Cookie", "JSESSIONID=" + sessionId);
        }
        if (!contentType.equals("")) {
            con.setRequestProperty("Content-Type", contentType);
        }
        con.setRequestProperty("Accept-Language", "en-US,en;q=0.5");
        con.setDoOutput(true);
        DataOutputStream wr = new DataOutputStream(con.getOutputStream());
        wr.writeBytes(payload);
        wr.flush();
        wr.close();
        int responseCode = con.getResponseCode();
        if (responseCode == 200) {
            BufferedReader in = new BufferedReader(new InputStreamReader(con.getInputStream()));
            String inputLine;
            StringBuffer response = new StringBuffer();
            while ((inputLine = in.readLine()) != null) {
                response.append(inputLine);
            }
            in.close();
            if (sessionId.equals("")) {
                String session_id = response.substring((response.lastIndexOf(":") + 3),
                        (response.lastIndexOf("}") - 2));
                return session_id;
            } else if (sessionId.equals("header")) {
                return con.getHeaderField("Set-Cookie");
            }

            return response.toString();
        }
        return null;
    }

    /**
     * This method is used to do a http post request
     *
     * @param url
     *            request url
     *
     * @param payload
     *            Content of the post request
     *
     * @param sessionId
     *            sessionId for authentication
     *
     * @param contentType
     *            content type of the post request
     *
     * @return response
     *
     * @throws  java.io.IOException
     *             - Throws this when failed to fulfill a http post request
     */
    public String doPostHttp(String url, String payload, String sessionId, String contentType) throws IOException {
        URL obj = new URL(url);
        HttpURLConnection con = (HttpURLConnection) obj.openConnection();
        //add reuqest header
        con.setRequestMethod("POST");
        //con.setRequestProperty("User-Agent", USER_AGENT);
        if (!sessionId.equals("") && !sessionId.equals("none")) {
            con.setRequestProperty("Cookie", "JSESSIONID=" + sessionId);
        }
        con.setRequestProperty("Content-Type", contentType);
        con.setDoOutput(true);
        DataOutputStream wr = new DataOutputStream(con.getOutputStream());
        wr.writeBytes(payload);
        wr.flush();
        wr.close();
        int responseCode = con.getResponseCode();
        if (responseCode == 200) {
            BufferedReader in = new BufferedReader(new InputStreamReader(con.getInputStream()));
            String inputLine;
            StringBuffer response = new StringBuffer();
            while ((inputLine = in.readLine()) != null) {
                response.append(inputLine);
            }
            in.close();
            if (sessionId.equals("")) {
                String session_id = response.substring((response.lastIndexOf(":") + 3),
                        (response.lastIndexOf("}") - 2));
                return session_id;
            } else if (sessionId.equals("appmSamlSsoTokenId")) {
                return con.getHeaderField("Set-Cookie").split(";")[0].split("=")[1];
            } else if (sessionId.equals("header")) {
                return con.getHeaderField("Set-Cookie").split("=")[1].split(";")[0];
            } else {
                return response.toString();
            }
        }
        return null;
    }

    /**
     * This method is used to do a http put request
     *
     * @param url
     *          request url
     *
     * @param sessionId
     *          sessionId for authentication
     *
     * @return response
     *
     * @throws  java.io.IOException
     *             - Throws this when failed to fulfill a http put request
     */
    public String doPut(String url, String sessionId) throws IOException {
        DefaultHttpClient httpClient = new DefaultHttpClient();
        StringBuilder result = new StringBuilder();
        HttpPut putRequest = new HttpPut(url);
        putRequest.addHeader("Content-Type", "application/x-www-form-urlencoded");
        putRequest.addHeader("Accept-Language", "en-US,en;q=0.5");
        putRequest.addHeader("Cookie", "JSESSIONID=" + sessionId);
        putRequest.addHeader("Accept-Encoding", "gzip, deflate");
        HttpResponse response = httpClient.execute(putRequest);
        if (response.getStatusLine().getStatusCode() != 200) {
            throw new RuntimeException("Failed : HTTP error code : " + response.getStatusLine().getStatusCode());
        }
        BufferedReader br = new BufferedReader(new InputStreamReader((response.getEntity().getContent())));
        String output;
        while ((output = br.readLine()) != null) {
            result.append(output);
        }
        return result.toString();
    }

    /**
     * This method is used to do a http get request
     *
     * @param url
     *          request url
     *
     * @param trackingCode
     *          tracking code of the web application
     *
     * @param appmSamlSsoTokenId
     *          appmSamlSsoTokenId id of the web application
     *
     * @param refer
     *          web page url
     *
     * @return response
     *
     * @throws  java.io.IOException
     *             Throws this when failed to fulfill a http get request
     */
    public String doGet(String url, String trackingCode, String appmSamlSsoTokenId, String refer)
            throws IOException {
        URL obj = new URL(url);
        HttpURLConnection con = (HttpURLConnection) obj.openConnection();
        con.setRequestMethod("GET");
        //add request header
        if (trackingCode.equals("")) {
            con.setRequestProperty("Accept",
                    "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8");
            con.setRequestProperty("Accept-Encoding", "gzip, deflate, sdch");
            con.setRequestProperty("Accept-Language", "en-US,en;q=0.8");
            con.setRequestProperty("Cookie", "JSESSIONID=" + appmSamlSsoTokenId);
        } else {
            con.setRequestProperty("Cookie", "appmSamlSsoTokenId=" + appmSamlSsoTokenId);
            con.setRequestProperty("trackingCode", trackingCode);
            con.setRequestProperty("Referer", refer);
        }
        int responseCode = con.getResponseCode();
        BufferedReader in = new BufferedReader(new InputStreamReader(con.getInputStream()));
        String inputLine;
        StringBuffer response = new StringBuffer();
        while ((inputLine = in.readLine()) != null) {
            response.append(inputLine);
        }
        in.close();
        return response.toString();
    }
}