Example usage for org.apache.commons.httpclient HttpMethod getURI

List of usage examples for org.apache.commons.httpclient HttpMethod getURI

Introduction

In this page you can find the example usage for org.apache.commons.httpclient HttpMethod getURI.

Prototype

public abstract URI getURI() throws URIException;

Source Link

Usage

From source file:com.twinsoft.convertigo.beans.connectors.HttpConnector.java

private String getAbsoluteUrl(HttpMethod method, String givenUrl)
        throws URIException, MalformedURLException, EngineException {
    String absoluteUrl = givenUrl;
    if (method != null) {
        if (givenUrl != null) {
            // givenUrl is already absolute
            if (givenUrl.startsWith("http")) {
                absoluteUrl = givenUrl;/*from   w w  w.  j av a  2 s. co m*/

                URL url = null;
                String host = "";
                int port = -1;
                if (absoluteUrl.toLowerCase().startsWith("https:")) {
                    if (!https) {
                        Engine.logBeans.debug("(HttpConnector) Setting up SSL properties");
                        certificateManager.collectStoreInformation(context);
                    }

                    url = new URL(absoluteUrl);
                    host = url.getHost();
                    port = url.getPort();
                    if (port == -1)
                        port = 443;

                    Engine.logBeans.debug("(HttpConnector) Host: " + host + ":" + port);

                    Engine.logBeans.debug(
                            "(HttpConnector) CertificateManager has changed: " + certificateManager.hasChanged);
                    if (certificateManager.hasChanged || (!host.equalsIgnoreCase(hostConfiguration.getHost()))
                            || (hostConfiguration.getPort() != port)) {
                        Engine.logBeans
                                .debug("(HttpConnector) Using MySSLSocketFactory for creating the SSL socket");
                        Protocol myhttps = new Protocol("https",
                                MySSLSocketFactory.getSSLSocketFactory(certificateManager.keyStore,
                                        certificateManager.keyStorePassword, certificateManager.trustStore,
                                        certificateManager.trustStorePassword, this.trustAllServerCertificates),
                                port);

                        hostConfiguration.setHost(host, port, myhttps);
                    }

                    // absoluteUrl = url.getFile();
                    Engine.logBeans.debug("(HttpConnector) Updated URL for SSL purposes: " + absoluteUrl);
                } else {
                    url = new URL(absoluteUrl);
                    host = url.getHost();
                    port = url.getPort();

                    Engine.logBeans.debug("(HttpConnector) Host: " + host + ":" + port);
                    hostConfiguration.setHost(host, port);
                }
            }
            // givenUrl is relative to method uri ones
            else {
                URI uri = method.getURI();
                String methodProtocol = uri.getScheme();
                String methodHost = uri.getHost();

                if (hostConfiguration.getProtocol().isSecure()) {
                    return givenUrl.startsWith("/") ? givenUrl : ('/' + givenUrl);
                }

                int methodPort = uri.getPort();
                String path = uri.getCurrentHierPath();
                path = ((path.equals("/") ? "" : path));

                absoluteUrl = methodProtocol + "://" + methodHost;
                if (methodPort != -1) {
                    absoluteUrl += ":" + methodPort;
                }

                if (!givenUrl.startsWith("/") && (path.length() == 0 || !givenUrl.contains(path + "/"))) {
                    absoluteUrl += path + "/" + givenUrl;
                } else {
                    absoluteUrl += givenUrl;
                }
            }
        }
    }
    return absoluteUrl;
}

From source file:davmail.exchange.ExchangeSession.java

protected HttpMethod submitLanguageSelectionForm(HttpMethod logonMethod) throws IOException {
    PostMethod postLanguageFormMethod;//from ww  w.  ja  v  a  2 s  .  c om
    // create an instance of HtmlCleaner
    HtmlCleaner cleaner = new HtmlCleaner();

    try {
        TagNode node = cleaner.clean(logonMethod.getResponseBodyAsStream());
        List forms = node.getElementListByName("form", true);
        TagNode languageForm;
        // select form
        if (forms.size() == 1) {
            languageForm = (TagNode) forms.get(0);
        } else {
            throw new IOException("Form not found");
        }
        String languageMethodPath = languageForm.getAttributeByName("action");

        postLanguageFormMethod = new PostMethod(getAbsoluteUri(logonMethod, languageMethodPath));

        List inputList = languageForm.getElementListByName("input", true);
        for (Object input : inputList) {
            String name = ((TagNode) input).getAttributeByName("name");
            String value = ((TagNode) input).getAttributeByName("value");
            if (name != null && value != null) {
                postLanguageFormMethod.addParameter(name, value);
            }
        }
        List selectList = languageForm.getElementListByName("select", true);
        for (Object select : selectList) {
            String name = ((TagNode) select).getAttributeByName("name");
            List optionList = ((TagNode) select).getElementListByName("option", true);
            String value = null;
            for (Object option : optionList) {
                if (((TagNode) option).getAttributeByName("selected") != null) {
                    value = ((TagNode) option).getAttributeByName("value");
                    break;
                }
            }
            if (name != null && value != null) {
                postLanguageFormMethod.addParameter(name, value);
            }
        }
    } catch (IOException e) {
        String errorMessage = "Error parsing language selection form at " + logonMethod.getURI();
        LOGGER.error(errorMessage);
        throw new IOException(errorMessage);
    } finally {
        logonMethod.releaseConnection();
    }

    return DavGatewayHttpClientFacade.executeFollowRedirects(httpClient, postLanguageFormMethod);
}

From source file:com.twinsoft.convertigo.beans.connectors.SiteClipperConnector.java

private void doProcessRequest(Shuttle shuttle) throws IOException, ServletException, EngineException {
    shuttle.statisticsTaskID = context.statistics.start(EngineStatistics.GET_DOCUMENT);
    try {/*from w w  w . j  av a2  s.  c o m*/
        shuttle.sharedScope = context.getSharedScope();

        String domain = shuttle.getRequest(QueryPart.host) + shuttle.getRequest(QueryPart.port);
        Engine.logSiteClipper.trace("(SiteClipperConnector) Prepare the request for the domain " + domain);
        if (!shouldRewrite(domain)) {
            Engine.logSiteClipper.info(
                    "(SiteClipperConnector) The domain " + domain + " is not allowed with this connector");
            shuttle.response.sendError(HttpServletResponse.SC_FORBIDDEN,
                    "The domain " + domain + " is not allowed with this connector");
            return;
        }

        String uri = shuttle.getRequest(QueryPart.uri);

        Engine.logSiteClipper.info("Preparing " + shuttle.request.getMethod() + " " + shuttle.getRequestUrl());

        HttpMethod httpMethod = null;
        XulRecorder xulRecorder = context.getXulRecorder();
        if (xulRecorder != null) {
            httpMethod = shuttle.httpMethod = xulRecorder.getRecord(shuttle.getRequestUrlAndQuery());
        }
        if (httpMethod == null) {
            try {
                switch (shuttle.getRequestHttpMethodType()) {
                case GET:
                    httpMethod = new GetMethod(uri);
                    break;
                case POST:
                    httpMethod = new PostMethod(uri);
                    ((PostMethod) httpMethod)
                            .setRequestEntity(new InputStreamRequestEntity(shuttle.request.getInputStream()));
                    break;
                case PUT:
                    httpMethod = new PutMethod(uri);
                    ((PutMethod) httpMethod)
                            .setRequestEntity(new InputStreamRequestEntity(shuttle.request.getInputStream()));
                    break;
                case DELETE:
                    httpMethod = new DeleteMethod(uri);
                    break;
                case HEAD:
                    httpMethod = new HeadMethod(uri);
                    break;
                case OPTIONS:
                    httpMethod = new OptionsMethod(uri);
                    break;
                case TRACE:
                    httpMethod = new TraceMethod(uri);
                    break;
                default:
                    throw new ServletException(
                            "(SiteClipperConnector) unknown http method " + shuttle.request.getMethod());
                }
                httpMethod.setFollowRedirects(false);
            } catch (Exception e) {
                throw new ServletException(
                        "(SiteClipperConnector) unexpected exception will building the http method : "
                                + e.getMessage());
            }
            shuttle.httpMethod = httpMethod;

            SiteClipperScreenClass screenClass = getCurrentScreenClass();
            Engine.logSiteClipper.info("Request screen class: " + screenClass.getName());

            for (String name : Collections
                    .list(GenericUtils.<Enumeration<String>>cast(shuttle.request.getHeaderNames()))) {
                if (requestHeadersToIgnore.contains(HeaderName.parse(name))) {
                    Engine.logSiteClipper.trace("(SiteClipperConnector) Ignoring request header " + name);
                } else {
                    String value = shuttle.request.getHeader(name);
                    Engine.logSiteClipper
                            .trace("(SiteClipperConnector) Copying request header " + name + "=" + value);
                    shuttle.setRequestCustomHeader(name, value);
                }
            }

            Engine.logSiteClipper.debug("(SiteClipperConnector) applying request rules for the screenclass "
                    + screenClass.getName());
            for (IRequestRule rule : screenClass.getRequestRules()) {
                if (rule.isEnabled()) {
                    Engine.logSiteClipper
                            .trace("(SiteClipperConnector) applying request rule " + rule.getName());
                    rule.fireEvents();
                    boolean done = rule.applyOnRequest(shuttle);
                    Engine.logSiteClipper.debug("(SiteClipperConnector) the request rule " + rule.getName()
                            + " is " + (done ? "well" : "not") + " applied");
                } else {
                    Engine.logSiteClipper
                            .trace("(SiteClipperConnector) skip the disabled request rule " + rule.getName());
                }
            }

            for (Entry<String, String> header : shuttle.requestCustomHeaders.entrySet()) {
                Engine.logSiteClipper.trace("(SiteClipperConnector) Push request header " + header.getKey()
                        + "=" + header.getValue());
                httpMethod.addRequestHeader(header.getKey(), header.getValue());
            }

            String queryString = shuttle.request.getQueryString();

            if (queryString != null) {
                try {
                    // Fake test in order to check query string validity
                    new URI("http://localhost/index?" + queryString, true,
                            httpMethod.getParams().getUriCharset());
                } catch (URIException e) {
                    // Bugfix #2103
                    StringBuffer newQuery = new StringBuffer();
                    for (String part : RegexpUtils.pattern_and.split(queryString)) {
                        String[] pair = RegexpUtils.pattern_equals.split(part, 2);
                        try {
                            newQuery.append('&')
                                    .append(URLEncoder.encode(URLDecoder.decode(pair[0], "UTF-8"), "UTF-8"));
                            if (pair.length > 1) {
                                newQuery.append('=').append(
                                        URLEncoder.encode(URLDecoder.decode(pair[1], "UTF-8"), "UTF-8"));
                            }
                        } catch (UnsupportedEncodingException ee) {
                            Engine.logSiteClipper
                                    .trace("(SiteClipperConnector) failed to encode query part : " + part);
                        }
                    }

                    queryString = newQuery.length() > 0 ? newQuery.substring(1) : newQuery.toString();
                    Engine.logSiteClipper.trace("(SiteClipperConnector) re-encode query : " + queryString);
                }
            }

            Engine.logSiteClipper.debug("(SiteClipperConnector) Copying the query string : " + queryString);
            httpMethod.setQueryString(queryString);

            //            if (context.httpState == null) {
            //               Engine.logSiteClipper.debug("(SiteClipperConnector) Creating new HttpState for context id " + context.contextID);
            //               context.httpState = new HttpState();
            //            } else {
            //               Engine.logSiteClipper.debug("(SiteClipperConnector) Using HttpState of context id " + context.contextID);
            //            }

            getHttpState(shuttle);

            HostConfiguration hostConfiguration = getHostConfiguration(shuttle);

            HttpMethodParams httpMethodParams = httpMethod.getParams();
            httpMethodParams.setBooleanParameter("http.connection.stalecheck", true);
            httpMethodParams.setParameter(HttpMethodParams.RETRY_HANDLER,
                    new DefaultHttpMethodRetryHandler(3, true));

            Engine.logSiteClipper.info("Requesting " + httpMethod.getName() + " "
                    + hostConfiguration.getHostURL() + httpMethod.getURI().toString());

            HttpClient httpClient = context.getHttpClient3(shuttle.getHttpPool());
            HttpUtils.logCurrentHttpConnection(httpClient, hostConfiguration, shuttle.getHttpPool());
            httpClient.executeMethod(hostConfiguration, httpMethod, context.httpState);
        } else {
            Engine.logSiteClipper.info("Retrieve recorded response from Context");
        }

        int status = httpMethod.getStatusCode();

        shuttle.processState = ProcessState.response;

        Engine.logSiteClipper.info("Request terminated with status " + status);
        shuttle.response.setStatus(status);

        if (Engine.isStudioMode() && status == HttpServletResponse.SC_OK
                && shuttle.getResponseMimeType().startsWith("text/")) {
            fireDataChanged(new ConnectorEvent(this, shuttle.getResponseAsString()));
        }

        SiteClipperScreenClass screenClass = getCurrentScreenClass();
        Engine.logSiteClipper.info("Response screen class: " + screenClass.getName());

        if (Engine.isStudioMode()) {
            Engine.theApp.fireObjectDetected(new EngineEvent(screenClass));
        }

        for (Header header : httpMethod.getResponseHeaders()) {
            String name = header.getName();
            if (responseHeadersToIgnore.contains(HeaderName.parse(name))) {
                Engine.logSiteClipper.trace("(SiteClipperConnector) Ignoring response header " + name);
            } else {
                String value = header.getValue();
                Engine.logSiteClipper
                        .trace("(SiteClipperConnector) Copying response header " + name + "=" + value);
                shuttle.responseCustomHeaders.put(name, value);
            }
        }

        Engine.logSiteClipper.debug(
                "(SiteClipperConnector) applying response rules for the screenclass " + screenClass.getName());
        for (IResponseRule rule : screenClass.getResponseRules()) {
            if (rule.isEnabled()) {
                Engine.logSiteClipper.trace("(SiteClipperConnector) applying response rule " + rule.getName());
                rule.fireEvents();
                boolean done = rule.applyOnResponse(shuttle);
                Engine.logSiteClipper.debug("(SiteClipperConnector) the response rule " + rule.getName()
                        + " is " + (done ? "well" : "not") + " applied");
            } else {
                Engine.logSiteClipper
                        .trace("(SiteClipperConnector) skip the disabled response rule " + rule.getName());
            }
        }

        for (Entry<String, String> header : shuttle.responseCustomHeaders.entrySet()) {
            Engine.logSiteClipper.trace(
                    "(SiteClipperConnector) Push request header " + header.getKey() + "=" + header.getValue());
            shuttle.response.addHeader(header.getKey(), header.getValue());
        }

        if (shuttle.postInstructions != null) {
            JSONArray instructions = new JSONArray();
            for (IClientInstruction instruction : shuttle.postInstructions) {
                try {
                    instructions.put(instruction.getInstruction());
                } catch (JSONException e) {
                    Engine.logSiteClipper.error(
                            "(SiteClipperConnector) Failed to add a post instruction due to a JSONException",
                            e);
                }
            }
            String codeToInject = "<script>C8O_postInstructions = " + instructions.toString() + "</script>\n"
                    + "<script src=\"" + shuttle.getRequest(QueryPart.full_convertigo_path)
                    + "/scripts/jquery.min.js\"></script>\n" + "<script src=\""
                    + shuttle.getRequest(QueryPart.full_convertigo_path)
                    + "/scripts/siteclipper.js\"></script>\n";

            String content = shuttle.getResponseAsString();
            Matcher matcher = HtmlLocation.head_top.matcher(content);
            String newContent = RegexpUtils.inject(matcher, codeToInject);
            if (newContent == null) {
                matcher = HtmlLocation.body_top.matcher(content);
                newContent = RegexpUtils.inject(matcher, codeToInject);
            }
            if (newContent != null) {
                shuttle.setResponseAsString(newContent);
            } else {
                Engine.logSiteClipper.info(
                        "(SiteClipperConnector) Failed to find a head or body tag in the response content");
                Engine.logSiteClipper.trace("(SiteClipperConnector) Response content : \"" + content + "\"");
            }
        }

        long nbBytes = 0L;
        if (shuttle.responseAsString != null
                && shuttle.responseAsString.hashCode() != shuttle.responseAsStringOriginal.hashCode()) {
            OutputStream os = shuttle.response.getOutputStream();
            switch (shuttle.getResponseContentEncoding()) {
            case gzip:
                os = new GZIPOutputStream(os);
                break;
            case deflate:
                os = new DeflaterOutputStream(os,
                        new Deflater(Deflater.DEFAULT_COMPRESSION | Deflater.DEFAULT_STRATEGY, true));
                break;
            default:
                break;
            }
            nbBytes = shuttle.responseAsByte.length;
            IOUtils.write(shuttle.responseAsString, os, shuttle.getResponseCharset());
            os.close();
        } else {
            InputStream is = (shuttle.responseAsByte == null) ? httpMethod.getResponseBodyAsStream()
                    : new ByteArrayInputStream(shuttle.responseAsByte);
            if (is != null) {
                nbBytes = 0;
                OutputStream os = shuttle.response.getOutputStream();
                int read = is.read();
                while (read >= 0) {
                    os.write(read);
                    os.flush();
                    read = is.read();
                    nbBytes++;
                }
                is.close();
                //               nbBytes = IOUtils.copyLarge(is, shuttle.response.getOutputStream());
                Engine.logSiteClipper
                        .trace("(SiteClipperConnector) Response body copyied (" + nbBytes + " bytes)");
            }
        }
        shuttle.response.getOutputStream().close();

        shuttle.score = getScore(nbBytes);
        Engine.logSiteClipper
                .debug("(SiteClipperConnector) Request terminated with a score of " + shuttle.score);
    } finally {
        long duration = context.statistics.stop(shuttle.statisticsTaskID);
        if (context.requestedObject != null) {
            try {
                Engine.theApp.billingManager.insertBilling(context, Long.valueOf(duration),
                        Long.valueOf(shuttle.score));
            } catch (Exception e) {
                Engine.logContext.warn("Unable to insert billing ticket (the billing is thus ignored): ["
                        + e.getClass().getName() + "] " + e.getMessage());
            }
        }
    }
}

From source file:davmail.exchange.ExchangeSession.java

/**
 * Try to find logon method path from logon form body.
 *
 * @param httpClient httpClient instance
 * @param initmethod form body http method
 * @return logon method/*www . java  2 s.c  o m*/
 * @throws IOException on error
 */
protected HttpMethod buildLogonMethod(HttpClient httpClient, HttpMethod initmethod) throws IOException {

    HttpMethod logonMethod = null;

    // create an instance of HtmlCleaner
    HtmlCleaner cleaner = new HtmlCleaner();

    // A OTP token authentication form in a previous page could have username fields with different names
    userNameInputs.clear();

    try {
        TagNode node = cleaner.clean(initmethod.getResponseBodyAsStream());
        List forms = node.getElementListByName("form", true);
        TagNode logonForm = null;
        // select form
        if (forms.size() == 1) {
            logonForm = (TagNode) forms.get(0);
        } else if (forms.size() > 1) {
            for (Object form : forms) {
                if ("logonForm".equals(((TagNode) form).getAttributeByName("name"))) {
                    logonForm = ((TagNode) form);
                }
            }
        }
        if (logonForm != null) {
            String logonMethodPath = logonForm.getAttributeByName("action");

            // workaround for broken form with empty action
            if (logonMethodPath != null && logonMethodPath.length() == 0) {
                logonMethodPath = "/owa/auth.owa";
            }

            logonMethod = new PostMethod(getAbsoluteUri(initmethod, logonMethodPath));

            // retrieve lost inputs attached to body
            List inputList = node.getElementListByName("input", true);

            for (Object input : inputList) {
                String type = ((TagNode) input).getAttributeByName("type");
                String name = ((TagNode) input).getAttributeByName("name");
                String value = ((TagNode) input).getAttributeByName("value");
                if ("hidden".equalsIgnoreCase(type) && name != null && value != null) {
                    ((PostMethod) logonMethod).addParameter(name, value);
                }
                // custom login form
                if (USER_NAME_FIELDS.contains(name)) {
                    userNameInputs.add(name);
                } else if (PASSWORD_FIELDS.contains(name)) {
                    passwordInput = name;
                } else if ("addr".equals(name)) {
                    // this is not a logon form but a redirect form
                    HttpMethod newInitMethod = DavGatewayHttpClientFacade.executeFollowRedirects(httpClient,
                            logonMethod);
                    logonMethod = buildLogonMethod(httpClient, newInitMethod);
                } else if (TOKEN_FIELDS.contains(name)) {
                    // one time password, ask it to the user
                    ((PostMethod) logonMethod).addParameter(name, DavGatewayOTPPrompt.getOneTimePassword());
                } else if ("otc".equals(name)) {
                    // captcha image, get image and ask user
                    String pinsafeUser = getAliasFromLogin();
                    if (pinsafeUser == null) {
                        pinsafeUser = userName;
                    }
                    GetMethod getMethod = new GetMethod("/PINsafeISAFilter.dll?username=" + pinsafeUser);
                    try {
                        int status = httpClient.executeMethod(getMethod);
                        if (status != HttpStatus.SC_OK) {
                            throw DavGatewayHttpClientFacade.buildHttpException(getMethod);
                        }
                        BufferedImage captchaImage = ImageIO.read(getMethod.getResponseBodyAsStream());
                        ((PostMethod) logonMethod).addParameter(name,
                                DavGatewayOTPPrompt.getCaptchaValue(captchaImage));

                    } finally {
                        getMethod.releaseConnection();
                    }
                }
            }
        } else {
            List frameList = node.getElementListByName("frame", true);
            if (frameList.size() == 1) {
                String src = ((TagNode) frameList.get(0)).getAttributeByName("src");
                if (src != null) {
                    LOGGER.debug("Frames detected in form page, try frame content");
                    initmethod.releaseConnection();
                    HttpMethod newInitMethod = DavGatewayHttpClientFacade.executeFollowRedirects(httpClient,
                            src);
                    logonMethod = buildLogonMethod(httpClient, newInitMethod);
                }
            } else {
                // another failover for script based logon forms (Exchange 2007)
                List scriptList = node.getElementListByName("script", true);
                for (Object script : scriptList) {
                    List contents = ((TagNode) script).getChildren();
                    for (Object content : contents) {
                        if (content instanceof CommentNode) {
                            String scriptValue = ((CommentNode) content).getCommentedContent();
                            String sUrl = StringUtil.getToken(scriptValue, "var a_sUrl = \"", "\"");
                            String sLgn = StringUtil.getToken(scriptValue, "var a_sLgnQS = \"", "\"");
                            if (sLgn == null) {
                                sLgn = StringUtil.getToken(scriptValue, "var a_sLgn = \"", "\"");
                            }
                            if (sUrl != null && sLgn != null) {
                                String src = getScriptBasedFormURL(initmethod, sLgn + sUrl);
                                LOGGER.debug("Detected script based logon, redirect to form at " + src);
                                HttpMethod newInitMethod = DavGatewayHttpClientFacade
                                        .executeFollowRedirects(httpClient, src);
                                logonMethod = buildLogonMethod(httpClient, newInitMethod);
                            }

                        } else if (content instanceof ContentNode) {
                            // Microsoft Forefront Unified Access Gateway redirect
                            String scriptValue = ((ContentNode) content).getContent().toString();
                            String location = StringUtil.getToken(scriptValue, "window.location.replace(\"",
                                    "\"");
                            if (location != null) {
                                LOGGER.debug("Post logon redirect to: " + location);
                                logonMethod = DavGatewayHttpClientFacade.executeFollowRedirects(httpClient,
                                        location);
                            }
                        }
                    }
                }
            }
        }
    } catch (IOException e) {
        LOGGER.error("Error parsing login form at " + initmethod.getURI());
    } finally {
        initmethod.releaseConnection();
    }

    return logonMethod;
}

From source file:com.jivesoftware.os.jive.utils.http.client.ApacheHttpClient31BackedHttpClient.java

private HttpStreamResponse executeStreamWithTimeout(final HttpMethodBase HttpMethod, int timeoutMillis) {
    client.getParams().setParameter("http.method.retry-handler", new DefaultHttpMethodRetryHandler(0, false));
    ExecutorService service = Executors.newSingleThreadExecutor();

    Future<HttpStreamResponse> future = service.submit(new Callable<HttpStreamResponse>() {
        @Override/*from   w  w w .java  2s.com*/
        public HttpStreamResponse call() throws IOException {
            return executeStream(HttpMethod);
        }
    });

    try {
        return future.get(timeoutMillis, TimeUnit.MILLISECONDS);
    } catch (Exception e) {
        String uriInfo = "";
        try {
            uriInfo = " for " + HttpMethod.getURI();
        } catch (Exception ie) {
        }
        LOG.warn("Http connection thread was interrupted or has timed out" + uriInfo, e);
        return null;
    } finally {
        service.shutdownNow();
    }
}

From source file:com.twinsoft.convertigo.beans.connectors.HttpConnector.java

private byte[] executeMethod(HttpMethod method, final Context context)
        throws IOException, URIException, MalformedURLException, EngineException {
    Header[] requestHeaders, responseHeaders = null;
    byte[] result = null;
    String contents = null;//from w w w.ja v  a 2s.c o m
    int statuscode = -1;

    if (!context.requestedObject.runningThread.bContinue)
        return null;

    Engine.logBeans
            .debug("(HttpConnector) Executing method - " + method.getName() + "(" + method.getPath() + ")");

    try {
        requestHeaders = method.getRequestHeaders();
        if (Engine.logBeans.isTraceEnabled())
            Engine.logBeans
                    .trace("(HttpConnector) Request headers :\n" + Arrays.asList(requestHeaders).toString());

        statuscode = doExecuteMethod(method, context);

        Engine.logBeans.debug("(HttpConnector) Status: " + method.getStatusLine().toString());

        responseHeaders = method.getResponseHeaders();
        context.setResponseHeaders(responseHeaders);
        if (Engine.logBeans.isTraceEnabled())
            Engine.logBeans
                    .trace("(HttpConnector) Response headers:\n" + Arrays.asList(responseHeaders).toString());

        if (statuscode != -1) {
            InputStream in = method.getResponseBodyAsStream();
            if (in != null) {

                /**
                 * Retrieve response charset if available in responseHeaders
                 */
                charset = null;
                boolean checkGZip = false; // add GZip support #320

                for (int i = 0; i < responseHeaders.length && (charset == null || !checkGZip); i++) {
                    Header head = responseHeaders[i];
                    if (HeaderName.ContentType.is(head)) {
                        context.contentType = head.getValue();
                        HeaderElement[] els = head.getElements();
                        for (int j = 0; j < els.length && charset == null; j++) {
                            NameValuePair nvp = els[j].getParameterByName("charset");
                            if (nvp != null)
                                charset = nvp.getValue();
                        }
                    } else if (HeaderName.ContentEncoding.is(head)) {
                        checkGZip = true;
                        HeaderElement[] els = head.getElements();
                        for (int j = 0; j < els.length; j++)
                            if ("gzip".equals(els[j].getName())) {
                                Engine.logBeans.debug("(HttpConnector) Decode GZip stream");
                                in = new GZIPInputStream(in);
                            }
                    }
                }

                if (context.contentType != null && context.contentType.startsWith("multipart/")
                        && context.requestedObject instanceof AbstractHttpTransaction) {
                    Engine.logBeans.debug("(HttpConnector) Decoding multipart contentType");

                    try {
                        AbstractHttpTransaction transaction = (AbstractHttpTransaction) context.requestedObject;

                        BigMimeMultipart mp = new BigMimeMultipart(new BufferedInputStream(in),
                                context.contentType);

                        ByteArrayOutputStream bos = new ByteArrayOutputStream();
                        mp.nextPart(bos);
                        result = bos.toByteArray();

                        if (transaction.getAllowDownloadAttachment()) {
                            Document doc = context.outputDocument;
                            Element attInfo = null;

                            File file = File.createTempFile("c8o_", ".part");

                            for (MimePart bp = mp.nextPart(file); bp != null; bp = mp.nextPart(file)) {
                                try {
                                    file.deleteOnExit();

                                    if (attInfo == null) {
                                        Engine.logBeans.debug("(HttpConnector) Saving attachment(s)");

                                        attInfo = doc.createElement("AttachmentInfo");
                                        doc.getDocumentElement().appendChild(attInfo);
                                    }

                                    Element att = doc.createElement("attachment");
                                    attInfo.appendChild(att);

                                    String cid = bp.getContentID();

                                    if (cid != null) {
                                        cid = cid.replaceFirst("^<?(.*?)>?$", "$1");
                                        att.setAttribute("cid", "cid:" + cid);
                                    }

                                    Engine.logBeans.debug("(HttpConnector) Saving the attachment cid: " + cid
                                            + " in file: " + file.getAbsolutePath());

                                    att.setAttribute("filepath", file.getAbsolutePath());

                                    Enumeration<javax.mail.Header> headers = GenericUtils
                                            .cast(bp.getAllHeaders());
                                    while (headers.hasMoreElements()) {
                                        javax.mail.Header header = headers.nextElement();
                                        Element eHeader = doc.createElement("header");
                                        att.appendChild(eHeader);

                                        eHeader.setAttribute("name", header.getName());
                                        eHeader.setAttribute("value", header.getValue());
                                    }
                                } catch (Exception e1) {
                                    Engine.logBeans
                                            .error("(HttpConnector) Failed to retrieve the attachment in "
                                                    + file.getAbsolutePath(), e1);
                                }

                                file = File.createTempFile("c8o_", ".part");
                            }

                            file.delete();
                            in.close();
                        }
                    } catch (Exception e) {
                        Engine.logBeans.error("(HttpConnector) Failed to retrieve attachments", e);
                    }
                } else {
                    result = IOUtils.toByteArray(in);
                    in.close();
                }
            }

            if (Engine.logBeans.isTraceEnabled()) {
                contents = new String((result != null) ? result : new byte[] {});
                Engine.logBeans.trace("(HttpConnector) Response content:\n" + contents);
            }

            String redirectUrl, newuri;
            GetMethod redirectMethod = null;

            // Handles REDIRECTION through Location header
            if ((statuscode == HttpStatus.SC_MOVED_TEMPORARILY)
                    || (statuscode == HttpStatus.SC_MOVED_PERMANENTLY)
                    || (statuscode == HttpStatus.SC_SEE_OTHER)
                    || (statuscode == HttpStatus.SC_TEMPORARY_REDIRECT)) {

                Header location = method.getResponseHeader("Location");
                if (location != null) {
                    newuri = location.getValue();
                    if ((newuri == null) || (newuri.equals(""))) {
                        newuri = "/";
                    }

                    // ignore any data after the ";" character
                    int split = newuri.indexOf(';');
                    if (split != -1) {
                        newuri = newuri.substring(0, split);
                    }

                    redirectUrl = getAbsoluteUrl(method, newuri);
                    Engine.logBeans.debug("(HttpConnector) Redirecting to : " + redirectUrl);
                    redirectMethod = new GetMethod(redirectUrl);

                    // set headers
                    for (int i = 0; i < requestHeaders.length; i++)
                        redirectMethod.setRequestHeader(requestHeaders[i]);

                    referer = redirectUrl.startsWith("http") ? redirectUrl
                            : (hostConfiguration.getHostURL() + redirectUrl);

                    result = executeMethod(redirectMethod, context); // recurse
                } else {
                    Engine.logBeans.debug("(HttpConnector) Invalid redirect!");
                }
            } else {
                /*
                 * String lwContents = contents.toLowerCase(); int index, i,
                 * j, k, z; // Handles REDIRECTION through META Refresh if
                 * (((index = lwContents.indexOf("http-equiv='refresh'")) !=
                 * -1) || ((index =
                 * lwContents.indexOf("http-equiv=\"refresh\"")) != -1)) {
                 * if ((i = lwContents.indexOf("content=", index + 20)) !=
                 * -1) { char c = lwContents.charAt(i+8); if ((j =
                 * lwContents.indexOf("url=", i)) != -1) { if ((k =
                 * lwContents.indexOf(c, j + 1)) != -1) { newuri =
                 * lwContents.substring(j+4, k); redirectUrl =
                 * getAbsoluteUrl(method,newuri);
                 * Engine.logBeans.debug("(HttpConnector) Redirecting to : "
                 * + redirectUrl); redirectMethod = new
                 * GetMethod(redirectUrl);
                 * 
                 * // set headers for (z=0; z<requestHeaders.length; z++)
                 * redirectMethod.setRequestHeader(requestHeaders[z]);
                 * 
                 * referer = redirectUrl; result =
                 * executeMethod(redirectMethod, context); // recurse } } }
                 * } // Handles FRAMESET else if
                 * (lwContents.indexOf("frameset") != -1) {
                 * Engine.logBeans.debug
                 * ("(HttpConnector) Analyzing frameset...");
                 * StringTokenizer st = new StringTokenizer(lwContents);
                 * StringEx newcontents = new StringEx(lwContents); while
                 * (st.hasMoreTokens()) { String token = st.nextToken();
                 * String uri; if (token.startsWith("src=")) { if
                 * ((token.indexOf("\"") != -1) || (token.indexOf("'") !=
                 * -1)) { token = token.substring(5); uri =
                 * token.substring(0,token.length()-1); newuri =
                 * getAbsoluteUrl(method,uri);
                 * Engine.logBeans.trace("(HttpConnector) Replaced uri ("+
                 * uri +") with newuri("+ newuri +")");
                 * 
                 * newcontents.replaceAll(token,newuri); } } }
                 * Engine.logBeans
                 * .trace("(HttpConnector) New response content:\n"+
                 * newcontents); result = newcontents.toString().getBytes();
                 * }
                 */
            }
        }
        //Added by julienda - #3433 - 04/03/2013
        AbstractHttpTransaction abstractHttpTransaction = (AbstractHttpTransaction) context.transaction;

        if (abstractHttpTransaction.getHttpInfo()) {
            Document doc = context.outputDocument;

            //Remove the node HTTPInfo if we have a redirect
            NodeList nodeList = XMLUtils.findElements(context.outputDocument.getDocumentElement(),
                    abstractHttpTransaction.getHttpInfoTagName());
            if (nodeList != null) {
                XMLUtils.removeNodeListContent(nodeList);
            }

            //Parent Element
            httpInfoElement = doc.createElement(abstractHttpTransaction.getHttpInfoTagName());

            //Add requested URL
            Element urlElement = doc.createElement("url");
            urlElement.setTextContent(method.getURI().toString());
            httpInfoElement.appendChild(urlElement);

            //Add status code
            Element httpStatusElement = doc.createElement("status");

            httpStatusElement.setAttribute("code", Integer.toString(statuscode));
            httpStatusElement.setAttribute("text", method.getStatusText());
            httpInfoElement.appendChild(httpStatusElement);

            //We add headers informations

            List<Header> headers = Arrays.asList(requestHeaders);
            if (!headers.isEmpty()) {
                Element httpHeadersElement = doc.createElement("headers");

                for (int i = 0; i < headers.size(); i++) {
                    Element elt = doc.createElement("header");
                    elt.setAttribute("name", headers.get(i).getName());
                    elt.setAttribute("value", headers.get(i).getValue());
                    httpHeadersElement.appendChild(elt);
                }
                httpInfoElement.appendChild(httpHeadersElement);
            }

            // we add response header information
            if (responseHeaders.length != 0) {
                Element httpHeadersElement = doc.createElement("responseHeaders");

                for (int i = 0; i < responseHeaders.length; i++) {
                    Element elt = doc.createElement("header");
                    elt.setAttribute("name", responseHeaders[i].getName());
                    elt.setAttribute("value", responseHeaders[i].getValue());
                    httpHeadersElement.appendChild(elt);
                }
                httpInfoElement.appendChild(httpHeadersElement);
            }

            doc.getDocumentElement().appendChild(httpInfoElement);
        }
    } finally {
        method.releaseConnection();
    }

    return result;
}

From source file:net.ushkinaz.storm8.http.HttpHelper.java

public static String getHttpResponse(HttpClient httpClient, HttpMethod httpMethod) {
    String asString = "";
    try {/*from   ww w. j  a  v  a2  s  .  c  o m*/
        int statusCode = httpClient.executeMethod(httpMethod);
        if (statusCode != 200) {
            throw new IOException("Can't access page : " + httpMethod.getURI());
        }
        asString = httpMethod.getResponseBodyAsString();
    } catch (IOException e) {
        LOGGER.error("Error", e);
    }
    return asString;
}

From source file:nl.nn.adapterframework.util.SsoUtil.java

public static void addSsoCredential(HttpMethod method, HttpState state, String defaultForwardHost) {
    try {/*from  ww w . j a  v a2s  .c o  m*/
        String name = SsoUtil.getSsoTokenName();
        String value = SsoUtil.getSsoToken();
        if (StringUtils.isEmpty(value)) {
            if (log.isDebugEnabled())
                log.debug("no value for SsoCredential [" + name + "]");
        } else {
            if (log.isDebugEnabled())
                log.debug("constructing SsoCredentialCookie [" + name + "]");
            Cookie ssoCookie = new Cookie();
            ssoCookie.setName(name);

            ssoCookie.setValue(value);
            String forwardHost;
            try {
                URI uri = method.getURI();
                forwardHost = uri.getHost();
                if (StringUtils.isEmpty(forwardHost)) {
                    if (log.isDebugEnabled())
                        log.debug("did not find host from URI [" + uri.getURI() + "], will use default ["
                                + defaultForwardHost + "] for SSO credential cookie");
                    forwardHost = defaultForwardHost;
                }
            } catch (Throwable t) {
                log.warn("could not extract host from URI", t);
                forwardHost = defaultForwardHost;
            }
            ssoCookie.setDomain(forwardHost);
            // path must have a value, otherwise cookie is not appended to request
            ssoCookie.setPath("/");
            if (log.isDebugEnabled())
                log.debug("set SSOcookie attributes: domain [" + ssoCookie.getDomain() + "] path ["
                        + ssoCookie.getPath() + "]");
            state.addCookie(ssoCookie);
        }

    } catch (Exception e) {
        log.warn("could not obtain SsoToken: " + e.getMessage());
    }
}

From source file:org.alfresco.jive.impl.JiveOpenClientImpl.java

/**
 * Debugging method for obtaining the state of a request as a String.
 * /*from  ww  w.j  a v a2 s .  com*/
 * @param method The method to retrieve the request state from <i>(may be null)</i>.
 * @return The request state as a human-readable string value <i>(will not be null)</i>.
 */
private String requestToString(final HttpMethod method, final String body) {
    StringBuffer result = new StringBuffer(128);

    if (method != null) {
        result.append("\n\tMethod: ");
        result.append(method.getName());
        result.append("\n\tURL: ");

        try {
            result.append(String.valueOf(method.getURI()));
        } catch (final URIException ue) {
            result.append("unknown, due to: " + ue.getMessage());
        }

        result.append("\n\tHeaders: ");

        for (final Header header : method.getRequestHeaders()) {
            result.append("\n\t\t");
            result.append(header.getName());
            result.append(" : ");
            result.append(header.getValue());
        }

        result.append("\n\tAuthenticating? " + method.getDoAuthentication());

        if (body != null) {
            result.append("\n\tBody: ");
            result.append(body);
        }
    } else {
        result.append("(null)");
    }

    return (result.toString());
}

From source file:org.apache.abdera.ext.oauth.OAuthScheme.java

private String generateSignature(OAuthCredentials credentials, HttpMethod method, String nonce, long timestamp)
        throws AuthenticationException {
    try {/*from w  ww  . j a v a2s.  c o m*/
        String baseString = method.getName().toUpperCase() + method.getURI().toString()
                + OAUTH_KEYS.OAUTH_CONSUMER_KEY.toLowerCase() + "=" + credentials.getConsumerKey()
                + OAUTH_KEYS.OAUTH_TOKEN.toLowerCase() + "=" + credentials.getToken()
                + OAUTH_KEYS.OAUTH_SIGNATURE_METHOD.toLowerCase() + "=" + credentials.getSignatureMethod()
                + OAUTH_KEYS.OAUTH_TIMESTAMP.toLowerCase() + "=" + timestamp
                + OAUTH_KEYS.OAUTH_NONCE.toLowerCase() + "=" + nonce + OAUTH_KEYS.OAUTH_VERSION.toLowerCase()
                + "=" + credentials.getVersion();
        return sign(credentials.getSignatureMethod(), URLEncoder.encode(baseString, "UTF-8"),
                credentials.getCert());
    } catch (URIException e) {
        throw new AuthenticationException(e.getMessage(), e);
    } catch (UnsupportedEncodingException e) {
        throw new AuthenticationException(e.getMessage(), e);
    }
}