2

I am using littleproxy-mitm to proxy requests in java to remote servers, yet I am getting an empty response from curl when trying to make a request through the proxy, regardless if it is http or https:

curl: (52) Empty reply from server

curl: (56) Proxy CONNECT aborted

My code:

    HttpProxyServer server =
            DefaultHttpProxyServer.bootstrap()
                    .withPort(PORT)
                    .withManInTheMiddle(new CertificateSniffingMitmManager())
                    .withFiltersSource(new HttpFiltersSourceAdapter() {
                        public HttpFilters filterRequest(HttpRequest originalRequest, ChannelHandlerContext context) {
                            System.out.println("-----------------------------------------------------");
                            HttpMethod method = originalRequest.getMethod();
                            String originalUri = originalRequest.getUri();
                            System.out.println("CLIENT " + method + " -> " + originalUri);
                            originalRequest.headers().forEach(entry -> {
                                System.out.println("-- " + entry.getKey() + ":" + entry.getValue());
                            });

                            if (HttpMethod.CONNECT.equals(method) && Objects.nonNull(context) && originalUri.endsWith(":443")) {
                                String url = "https://" + originalUri.replaceFirst(":443$", "");
                                context.channel().attr(CONNECTED_URL).set(url);
                                System.out.println("URL: " + context.channel().attr(CONNECTED_URL).get());
                                System.out.println("(Manipulating connection request for successful HTTPS: " + originalUri + " -> " + url + ")");
                                return new HttpFiltersAdapter(originalRequest, context);
                            }

                            return new HttpFiltersAdapter(originalRequest) {

                                @Override
                                public HttpResponse clientToProxyRequest(HttpObject httpObject) {
                                    if (httpObject instanceof LastHttpContent) {
                                        LastHttpContent copy = ((LastHttpContent) httpObject).copy();
                                        String body = copy.content().toString(StandardCharsets.UTF_8);
                                        System.out.println("-- Content:" + body);
                                    }
                                    return null;
                                }

                                @Override
                                public HttpObject serverToProxyResponse(HttpObject httpObject) {
                                    System.out.println("Server Response");
                                    if (httpObject instanceof HttpResponse) {
                                        HttpResponse response = (HttpResponse) httpObject;
                                        System.out.println("SERVER RESPONSE");
                                        response.headers().forEach(entry -> {
                                            System.out.println("-- " + entry.getKey() + ":" + entry.getValue());
                                        });
                                    }
                                    return httpObject;
                                }
                            };
                        }
                    })
                    .start();

0 Answers0