Merged branch 'master' into 'jetty-9.1'.
diff --git a/jetty-client/src/main/java/org/eclipse/jetty/client/http/HttpReceiverOverHTTP.java b/jetty-client/src/main/java/org/eclipse/jetty/client/http/HttpReceiverOverHTTP.java
index 6fa8275..9e939fe 100644
--- a/jetty-client/src/main/java/org/eclipse/jetty/client/http/HttpReceiverOverHTTP.java
+++ b/jetty-client/src/main/java/org/eclipse/jetty/client/http/HttpReceiverOverHTTP.java
@@ -129,7 +129,8 @@
if (exchange == null)
return false;
- parser.setHeadResponse(HttpMethod.HEAD.is(exchange.getRequest().getMethod()));
+ String method = exchange.getRequest().getMethod();
+ parser.setHeadResponse(HttpMethod.HEAD.is(method) || HttpMethod.CONNECT.is(method));
exchange.getResponse().version(version).status(status).reason(reason);
responseBegin(exchange);
@@ -177,7 +178,7 @@
return false;
responseSuccess(exchange);
- return false;
+ return true;
}
@Override
diff --git a/jetty-proxy/src/test/java/org/eclipse/jetty/proxy/ProxyTunnellingTest.java b/jetty-proxy/src/test/java/org/eclipse/jetty/proxy/ProxyTunnellingTest.java
index 9db2204..22f51ce 100644
--- a/jetty-proxy/src/test/java/org/eclipse/jetty/proxy/ProxyTunnellingTest.java
+++ b/jetty-proxy/src/test/java/org/eclipse/jetty/proxy/ProxyTunnellingTest.java
@@ -20,6 +20,7 @@
import java.io.IOException;
import java.net.ConnectException;
+import java.net.Socket;
import java.net.URLEncoder;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.ExecutionException;
@@ -55,6 +56,7 @@
import org.hamcrest.Matchers;
import org.junit.After;
import org.junit.Assert;
+import org.junit.Assume;
import org.junit.Rule;
import org.junit.Test;
@@ -116,14 +118,20 @@
protected void stopServer() throws Exception
{
- server.stop();
- server.join();
+ if (server != null)
+ {
+ server.stop();
+ server.join();
+ }
}
protected void stopProxy() throws Exception
{
- proxy.stop();
- proxy.join();
+ if (proxy != null)
+ {
+ proxy.stop();
+ proxy.join();
+ }
}
@Test
@@ -364,6 +372,42 @@
}
}
+ @Test
+ public void testExternalProxy() throws Exception
+ {
+ // Free proxy server obtained from http://hidemyass.com/proxy-list/
+ String proxyHost = "81.208.25.53";
+ int proxyPort = 3128;
+ try
+ {
+ new Socket(proxyHost, proxyPort).close();
+ }
+ catch (IOException x)
+ {
+ Assume.assumeNoException(x);
+ }
+
+ SslContextFactory sslContextFactory = new SslContextFactory();
+ sslContextFactory.start();
+
+ HttpClient httpClient = new HttpClient(sslContextFactory);
+ httpClient.setProxyConfiguration(new ProxyConfiguration(proxyHost, proxyPort));
+ httpClient.start();
+
+ try
+ {
+ ContentResponse response = httpClient.newRequest("https://www.google.com")
+ // Use a longer timeout, sometimes the proxy takes a while to answer
+ .timeout(20, TimeUnit.SECONDS)
+ .send();
+ assertEquals(HttpStatus.OK_200, response.getStatus());
+ }
+ finally
+ {
+ httpClient.stop();
+ }
+ }
+
private static class ServerHandler extends AbstractHandler
{
public void handle(String target, Request request, HttpServletRequest httpRequest, HttpServletResponse httpResponse) throws IOException, ServletException