Использование команды Java для FTP Put через Squid HTTP Proxy ошибка - PullRequest
1 голос
/ 24 июня 2011

Я немного зеленоват с Java, но столкнулся с проблемой при попытке ЗАГРУЗИТЬ локальный файл на удаленный FTP-сервер через SQUID HTTP-прокси (обратите внимание, это явно связывает мои руки так, что 'FTP' и 'SOCKSТипы прокси не входят в сферу).

Итак, вот мой код:

                       URL url = new URL(urlString);
                       OutputStream os ;                             

                       System.setProperty("proxySet", "true");
                       System.setProperty("proxyHost", proxyHost.trim());
                       System.setProperty("proxyPort", proxyPort.stringValue());


                       URLConnection ftpConn = url.openConnection() ;
                       ftpConn.setAllowUserInteraction(true); //threw this in to see if it would work, does nothing
                       ftpConn.setDoOutput(true); //here is where I set the setDoOutput
                       os = ftpConn.getOutputStream(); //here is where the exception occurs

Я продолжаю получать это исключение:

Вызов Java завершен необработанным исключением Java: java.net.ProtocolException:невозможно записать в URLConnection, если doOutput = false - вызвать setDoOutput (true)

Так что я пробовал это с FTPURLConnection и т. д., и у меня возникла та же проблема.

При отладке кажется, что в ftpConn есть не менее трех переменных, которые называются doOutput .
Только одна редактируемая (тогда как две другие нет)

Первый (и, похоже, тот, который возвращается через getDoOutput ) возвращает true после установки ftpConn.setDoOutput (true); .

просмотр исходного кода для HttpURLConnection:

 public synchronized OutputStream getOutputStream()
                    throws IOException {

                try {
                    if (!doOutput) {
                        throw new ProtocolException(
                                "cannot write to a URLConnection"
                                        + " if doOutput=false - call setDoOutput(true)");
                    }

Просмотр обработки прокси в FtpURLConnection приводит меня к мысли, что когда он определяетчто вы используете HTTP ProxyОтключение обработки к HttpURLConnection.

Здесь, по-моему, происходит отключение (либо для меня, либо для библиотеки, либо для прокси-сервера).

Я что-то пропустил, чтобы установить setDoOutput или что-то еще?

Мне удалось успешно туннелировать из прокси-сервера для GET, но все PUT не работают на doOutput.

Спасибо за любую помощь или указатели, чтобы заставить это работать.

PS Я использую Java 1.5.0_10 (мы здесь, чтобы соответствовать другим приложениям)

1 Ответ

0 голосов
/ 27 июня 2011

хорошо обнаружил, что это ошибка (Bug 6519647) в металинке.Обходной путь в значительной степени использует что-то другое!

(эта ошибка сохраняется независимо от того, как настроен прокси-сервер (с / без «http.» и даже через прокси-класс)

извините задубликат редактирования / ответа, это мой первый «ответ» на мой собственный вопрос.

переключился на ftp4j, но все еще сталкивается с проблемами прокси-серверов squid (это совсем другая история).

...