Search in sources :

Example 56 with ProtocolException

use of org.apache.http.ProtocolException in project undertow by undertow-io.

the class FormAuthTestCase method testFormAuth.

@Test
public void testFormAuth() throws IOException {
    TestHttpClient client = new TestHttpClient();
    client.setRedirectStrategy(new DefaultRedirectStrategy() {

        @Override
        public boolean isRedirected(final HttpRequest request, final HttpResponse response, final HttpContext context) throws ProtocolException {
            Header[] locationHeaders = response.getHeaders("Location");
            if (locationHeaders != null && locationHeaders.length > 0) {
                for (Header locationHeader : locationHeaders) {
                    assertFalse("Location header incorrectly computed resulting in wrong request URI upon redirect, " + "failed probably due UNDERTOW-884", locationHeader.getValue().startsWith(DefaultServer.getDefaultServerURL() + DefaultServer.getDefaultServerURL()));
                }
            }
            if (response.getStatusLine().getStatusCode() == StatusCodes.FOUND) {
                return true;
            }
            return super.isRedirected(request, response, context);
        }
    });
    try {
        final String uri = DefaultServer.getDefaultServerURL() + "/secured/test";
        HttpGet get = new HttpGet(uri);
        HttpResponse result = client.execute(get);
        assertEquals(StatusCodes.OK, result.getStatusLine().getStatusCode());
        String response = HttpClientUtils.readResponse(result);
        Assert.assertEquals("Login Page", response);
        BasicNameValuePair[] pairs = new BasicNameValuePair[] { new BasicNameValuePair("j_username", "userOne"), new BasicNameValuePair("j_password", "passwordOne") };
        final List<NameValuePair> data = new ArrayList<>();
        data.addAll(Arrays.asList(pairs));
        HttpPost post = new HttpPost(DefaultServer.getDefaultServerURL() + "/j_security_check;jsessionid=dsjahfklsahdfjklsa");
        post.setEntity(new UrlEncodedFormEntity(data));
        result = client.execute(post);
        assertEquals(StatusCodes.OK, result.getStatusLine().getStatusCode());
        Header[] values = result.getHeaders("ProcessedBy");
        assertEquals(1, values.length);
        assertEquals("ResponseHandler", values[0].getValue());
        HttpClientUtils.readResponse(result);
    } finally {
        client.getConnectionManager().shutdown();
    }
}
Also used : HttpRequest(org.apache.http.HttpRequest) ProtocolException(org.apache.http.ProtocolException) BasicNameValuePair(org.apache.http.message.BasicNameValuePair) NameValuePair(org.apache.http.NameValuePair) HttpPost(org.apache.http.client.methods.HttpPost) HttpGet(org.apache.http.client.methods.HttpGet) HttpContext(org.apache.http.protocol.HttpContext) ArrayList(java.util.ArrayList) HttpResponse(org.apache.http.HttpResponse) UrlEncodedFormEntity(org.apache.http.client.entity.UrlEncodedFormEntity) TestHttpClient(io.undertow.testutils.TestHttpClient) Header(org.apache.http.Header) BasicNameValuePair(org.apache.http.message.BasicNameValuePair) DefaultRedirectStrategy(org.apache.http.impl.client.DefaultRedirectStrategy) Test(org.junit.Test)

Example 57 with ProtocolException

use of org.apache.http.ProtocolException in project NetDiscovery by fengzhizi715.

the class RedirectStrategy method getRedirect.

@Override
public HttpUriRequest getRedirect(HttpRequest request, HttpResponse response, HttpContext context) throws ProtocolException {
    URI uri = getLocationURI(request, response, context);
    String method = request.getRequestLine().getMethod();
    if ("post".equalsIgnoreCase(method)) {
        try {
            HttpRequestWrapper httpRequestWrapper = (HttpRequestWrapper) request;
            httpRequestWrapper.setURI(uri);
            httpRequestWrapper.removeHeaders("Content-Length");
            return httpRequestWrapper;
        } catch (Exception e) {
            log.error("强转为HttpRequestWrapper出错");
        }
        return new HttpPost(uri);
    } else {
        return new HttpGet(uri);
    }
}
Also used : HttpPost(org.apache.http.client.methods.HttpPost) HttpGet(org.apache.http.client.methods.HttpGet) HttpRequestWrapper(org.apache.http.client.methods.HttpRequestWrapper) URI(java.net.URI) ProtocolException(org.apache.http.ProtocolException)

Example 58 with ProtocolException

use of org.apache.http.ProtocolException in project wso2-synapse by wso2.

the class HttpCoreNIOSender method sendAsyncResponse.

/**
 * Send the passed in response message, asynchronously
 * @param msgContext the message context to be sent
 * @throws AxisFault on error
 */
private void sendAsyncResponse(MessageContext msgContext) throws AxisFault {
    int contentLength = extractContentLength(msgContext);
    // remove unwanted HTTP headers (if any from the current message)
    removeUnwantedHeaders(msgContext);
    // Check whether original messageType value is changed. if not set the correct value to engage correct message formatter
    String cType = (String) msgContext.getProperty(NhttpConstants.MC_CONTENT_TYPE);
    String messageType = (String) msgContext.getProperty(NhttpConstants.MESSAGE_TYPE);
    String oriMessageType = (String) msgContext.getProperty(NhttpConstants.ORIGINAL_MESSAGE_TYPE);
    if (cType != null && cType.indexOf(HTTPConstants.MEDIA_TYPE_MULTIPART_RELATED) != -1 && messageType != null && messageType.equals(oriMessageType)) {
        msgContext.setProperty(NhttpConstants.MESSAGE_TYPE, HTTPConstants.MEDIA_TYPE_MULTIPART_RELATED);
    }
    Map transportHeaders = (Map) msgContext.getProperty(MessageContext.TRANSPORT_HEADERS);
    ServerWorker worker = (ServerWorker) msgContext.getProperty(Constants.OUT_TRANSPORT_INFO);
    NHttpServerConnection conn = worker.getConn();
    if (null == conn.getHttpRequest()) {
        // this is a special case we dropped the connection when message size exceeds the user defined threshold
        if (conn.getContext().getAttribute(NhttpConstants.CONNECTION_DROPPED) != null && (Boolean) conn.getContext().getAttribute(NhttpConstants.CONNECTION_DROPPED)) {
            // already submitted response for this case, hence return
            return;
        }
    }
    HttpResponse response = worker.getResponse();
    OMOutputFormat format = NhttpUtil.getOMOutputFormat(msgContext);
    MessageFormatter messageFormatter = MessageFormatterDecoratorFactory.createMessageFormatterDecorator(msgContext);
    Boolean noEntityBody = (Boolean) msgContext.getProperty(NhttpConstants.NO_ENTITY_BODY);
    if (noEntityBody == null || Boolean.FALSE == noEntityBody) {
        response.setHeader(HTTP.CONTENT_TYPE, messageFormatter.getContentType(msgContext, format, msgContext.getSoapAction()));
    } else if (Boolean.TRUE == noEntityBody) {
        ((BasicHttpEntity) response.getEntity()).setChunked(false);
        ((BasicHttpEntity) response.getEntity()).setContentLength(0);
        // as synapse cannot calculate content length without providing message body.
        if (transportHeaders.get(NhttpConstants.HTTP_REQUEST_METHOD) != null && NhttpConstants.HTTP_HEAD.equals(transportHeaders.get(NhttpConstants.HTTP_REQUEST_METHOD)) && transportHeaders.get(NhttpConstants.ORIGINAL_CONTENT_LEN) != null) {
            ((BasicHttpEntity) response.getEntity()).setContentLength(Long.parseLong(String.valueOf(transportHeaders.get(NhttpConstants.ORIGINAL_CONTENT_LEN))));
            transportHeaders.remove(NhttpConstants.ORIGINAL_CONTENT_LEN);
            transportHeaders.remove(NhttpConstants.HTTP_REQUEST_METHOD);
        }
    }
    response.setStatusCode(determineHttpStatusCode(msgContext, response));
    // Override the Standard Reason Phrase
    if (msgContext.getProperty(NhttpConstants.HTTP_REASON_PHRASE) != null && !msgContext.getProperty(NhttpConstants.HTTP_REASON_PHRASE).equals("")) {
        response.setReasonPhrase(msgContext.getProperty(NhttpConstants.HTTP_REASON_PHRASE).toString());
    }
    // set any transport headers
    if (transportHeaders != null && !transportHeaders.values().isEmpty()) {
        Iterator iter = transportHeaders.keySet().iterator();
        while (iter.hasNext()) {
            Object header = iter.next();
            Object value = transportHeaders.get(header);
            if (value != null && header instanceof String && value instanceof String) {
                response.addHeader((String) header, (String) value);
                String excessProp = NhttpConstants.EXCESS_TRANSPORT_HEADERS;
                Map map = (Map) msgContext.getProperty(excessProp);
                if (map != null && map.get(header) != null) {
                    log.debug("Number of excess values for " + header + " header is : " + ((Collection) (map.get(header))).size());
                    for (Iterator iterator = map.keySet().iterator(); iterator.hasNext(); ) {
                        String key = (String) iterator.next();
                        for (String excessVal : (Collection<String>) map.get(key)) {
                            if (header.equals(key)) {
                                response.addHeader((String) header, (String) excessVal);
                            }
                        }
                    }
                }
            }
        }
    }
    boolean forceContentLength = msgContext.isPropertyTrue(NhttpConstants.FORCE_HTTP_CONTENT_LENGTH);
    boolean forceContentLengthCopy = msgContext.isPropertyTrue(NhttpConstants.COPY_CONTENT_LENGTH_FROM_INCOMING);
    BasicHttpEntity entity = (BasicHttpEntity) response.getEntity();
    MetricsCollector lstMetrics = worker.getServiceHandler().getMetrics();
    try {
        if (forceContentLength) {
            entity.setChunked(false);
            if (forceContentLengthCopy && contentLength > 0) {
                entity.setContentLength(contentLength);
            } else {
                setStreamAsTempData(entity, messageFormatter, msgContext, format);
            }
        }
        worker.getServiceHandler().commitResponse(worker.getConn(), response);
        lstMetrics.reportResponseCode(response.getStatusLine().getStatusCode());
        OutputStream out = worker.getOutputStream();
        /*
             * if this is a dummy message to handle http 202 case with non-blocking IO
             * write an empty byte array as body
             */
        if (msgContext.isPropertyTrue(NhttpConstants.SC_ACCEPTED) || Boolean.TRUE == noEntityBody) {
            out.write(new byte[0]);
        } else {
            if (forceContentLength) {
                if (forceContentLengthCopy && contentLength > 0) {
                    messageFormatter.writeTo(msgContext, format, out, false);
                } else {
                    writeMessageFromTempData(out, msgContext);
                }
            } else {
                messageFormatter.writeTo(msgContext, format, out, false);
            }
        }
        out.close();
        if (lstMetrics != null) {
            lstMetrics.incrementMessagesSent();
        }
    } catch (ProtocolException e) {
        log.error(e + " (Synapse may be trying to send an exact response more than once )");
    } catch (HttpException e) {
        if (lstMetrics != null) {
            lstMetrics.incrementFaultsSending();
        }
        handleException("Unexpected HTTP protocol error sending response to : " + worker.getRemoteAddress(), e);
    } catch (ConnectionClosedException e) {
        if (lstMetrics != null) {
            lstMetrics.incrementFaultsSending();
        }
        log.warn("Connection closed by client : " + worker.getRemoteAddress());
    } catch (IllegalStateException e) {
        if (lstMetrics != null) {
            lstMetrics.incrementFaultsSending();
        }
        log.warn("Connection closed by client : " + worker.getRemoteAddress());
    } catch (IOException e) {
        if (lstMetrics != null) {
            lstMetrics.incrementFaultsSending();
        }
        handleException("IO Error sending response message to : " + worker.getRemoteAddress(), e);
    } catch (Exception e) {
        if (lstMetrics != null) {
            lstMetrics.incrementFaultsSending();
        }
        handleException("General Error sending response message to : " + worker.getRemoteAddress(), e);
    }
    InputStream is = worker.getIs();
    if (is != null) {
        try {
            is.close();
        } catch (IOException ignore) {
        }
    }
}
Also used : MetricsCollector(org.apache.axis2.transport.base.MetricsCollector) NhttpMetricsCollector(org.apache.synapse.transport.nhttp.util.NhttpMetricsCollector) ProtocolException(org.apache.http.ProtocolException) InputStream(java.io.InputStream) OutputStream(java.io.OutputStream) HttpResponse(org.apache.http.HttpResponse) ConnectionClosedException(org.apache.http.ConnectionClosedException) BasicHttpEntity(org.apache.http.entity.BasicHttpEntity) MessageFormatter(org.apache.axis2.transport.MessageFormatter) InterruptedIOException(java.io.InterruptedIOException) IOException(java.io.IOException) ProtocolException(org.apache.http.ProtocolException) InvalidConfigurationException(org.apache.synapse.transport.exceptions.InvalidConfigurationException) HttpException(org.apache.http.HttpException) InterruptedIOException(java.io.InterruptedIOException) MalformedURLException(java.net.MalformedURLException) IOException(java.io.IOException) ConnectionClosedException(org.apache.http.ConnectionClosedException) NHttpServerConnection(org.apache.http.nio.NHttpServerConnection) Iterator(java.util.Iterator) Collection(java.util.Collection) HttpException(org.apache.http.HttpException) OMOutputFormat(org.apache.axiom.om.OMOutputFormat) Map(java.util.Map)

Example 59 with ProtocolException

use of org.apache.http.ProtocolException in project lavaplayer by sedmelluq.

the class AbstractRoutePlanner method determineRoute.

@Override
public HttpRoute determineRoute(final HttpHost host, final HttpRequest request, final HttpContext context) throws HttpException {
    Args.notNull(request, "Request");
    if (host == null) {
        throw new ProtocolException("Target host is not specified");
    }
    final HttpClientContext clientContext = HttpClientContext.adapt(context);
    final RequestConfig config = clientContext.getRequestConfig();
    int remotePort;
    if (host.getPort() <= 0) {
        try {
            remotePort = schemePortResolver.resolve(host);
        } catch (final UnsupportedSchemeException e) {
            throw new HttpException(e.getMessage());
        }
    } else
        remotePort = host.getPort();
    final Tuple<Inet4Address, Inet6Address> remoteAddresses = IpAddressTools.getRandomAddressesFromHost(host);
    final Tuple<InetAddress, InetAddress> addresses = determineAddressPair(remoteAddresses);
    final HttpHost target = new HttpHost(addresses.r, host.getHostName(), remotePort, host.getSchemeName());
    final HttpHost proxy = config.getProxy();
    final boolean secure = target.getSchemeName().equalsIgnoreCase("https");
    clientContext.setAttribute(CHOSEN_IP_ATTRIBUTE, addresses.l);
    log.debug("Setting route context attribute to {}", addresses.l);
    if (proxy == null) {
        return new HttpRoute(target, addresses.l, secure);
    } else {
        return new HttpRoute(target, addresses.l, proxy, secure);
    }
}
Also used : ProtocolException(org.apache.http.ProtocolException) RequestConfig(org.apache.http.client.config.RequestConfig) Inet4Address(java.net.Inet4Address) HttpClientContext(org.apache.http.client.protocol.HttpClientContext) Inet6Address(java.net.Inet6Address) HttpRoute(org.apache.http.conn.routing.HttpRoute) HttpHost(org.apache.http.HttpHost) UnsupportedSchemeException(org.apache.http.conn.UnsupportedSchemeException) HttpException(org.apache.http.HttpException) InetAddress(java.net.InetAddress)

Aggregations

ProtocolException (org.apache.http.ProtocolException)59 Header (org.apache.http.Header)21 ArrayList (java.util.ArrayList)20 HttpResponse (org.apache.http.HttpResponse)18 URI (java.net.URI)17 HttpRequest (org.apache.http.HttpRequest)17 HttpContext (org.apache.http.protocol.HttpContext)17 HttpPost (org.apache.http.client.methods.HttpPost)16 HttpHost (org.apache.http.HttpHost)15 NameValuePair (org.apache.http.NameValuePair)14 UrlEncodedFormEntity (org.apache.http.client.entity.UrlEncodedFormEntity)14 BasicNameValuePair (org.apache.http.message.BasicNameValuePair)14 TestHttpClient (io.undertow.testutils.TestHttpClient)13 DefaultRedirectStrategy (org.apache.http.impl.client.DefaultRedirectStrategy)13 Test (org.junit.Test)12 URISyntaxException (java.net.URISyntaxException)11 ParseException (org.apache.http.ParseException)9 ProtocolVersion (org.apache.http.ProtocolVersion)9 HttpGet (org.apache.http.client.methods.HttpGet)9 IOException (java.io.IOException)8