Я немного не знаком с Java, но столкнулся с проблемой при попытке ЗАГРУЗИТЬ локальный файл на удаленный FTP-сервер через HTTP-прокси SQUID (обратите внимание, что это явно связывает мне руки, так что типы прокси-серверов «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-прокси, он передает обработку HttpURLConnection.
Здесь, я думаю, происходит отключение (либо у меня, либо у библиотеки, либо у прокси).
Я что-то пропустил, чтобы установить setDoOutput или что-то еще?
Мне удалось успешно туннелировать из прокси-сервера для GET, но все PUT FAILING на doOutput.
Спасибо за любую помощь или указатели, чтобы заставить это работать.
P.S. Я использую Java 1.5.0_10 (мы здесь, чтобы соответствовать другим приложениям)