Я немного зеленоват с 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 (мы здесь, чтобы соответствовать другим приложениям)