/* * Copyright (c) 2002, 2019, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as * published by the Free Software Foundation. * * This code is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License * version 2 for more details (a copy is included in the LICENSE file that * accompanied this code). * * You should have received a copy of the GNU General Public License version * 2 along with this work; if not, write to the Free Software Foundation, * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. * * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA * or visit www.oracle.com if you need additional information or have any * questions.
*/
/* * @test * @bug 4720715 * @summary FTP with user and password doesn't work through proxy
*/
/* * The goal here is to simulate a simplified (a lot) HTTP proxy server to see * what kind of URL is passed down the line by the URLConnection. * In particular, we want to make sure no information is lost (like username * and password).
*/
publicclass ProxyTest {
/* * Proxy server as an innerclass. Has to run in a separate thread
*/ privateclass HttpProxyServer extendsThread { private ServerSocket server; privateint port; privatevolatileboolean done = false; private String askedUrl;
/** * This Inner class will handle ONE client at a time. * That's where 99% of the protocol handling is done.
*/
/** * A way to tell the server that it can stop.
*/ synchronizedpublicvoid terminate() {
done = true; try { server.close(); } catch (IOException unused) {}
}
privatestaticboolean hasFtp() { try { returnnew java.net.URL("ftp://") != null;
} catch (java.net.MalformedURLException x) {
System.out.println("FTP not supported by this runtime."); returnfalse;
}
}
publicstaticvoid main(String[] args) throws Exception { if (hasFtp()) new ProxyTest();
}
public ProxyTest() throws Exception {
BufferedReader in = null;
String testURL = "ftp://anonymous:password@myhost.mydomain/index.html";
HttpProxyServer server = new HttpProxyServer(); try {
server.start(); int port = server.getPort();
InetAddress loopback = InetAddress.getLoopbackAddress();
Proxy ftpProxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress(loopback, port));
URL url = new URL(testURL);
InputStream ins = (url.openConnection(ftpProxy)).getInputStream();
in = new BufferedReader(new InputStreamReader(ins));
String line; do {
line = in.readLine();
} while (line != null);
in.close();
} catch (Exception e) {
e.printStackTrace();
} finally {
server.terminate(); try { in.close(); } catch (IOException unused) {}
} /* * If the URLs don't match, we've got a bug!
*/ if (!testURL.equals(server.getURL())) { thrownew RuntimeException(server.getURL() + " != " + testURL);
}
}
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.