2011-06-24 1 views
1

Je suis un peu vert avec Java mais j'ai rencontré un problème en essayant de télécharger un fichier local sur un serveur FTP distant via un proxy HTTP SQUID (s'il vous plaît noter cela évidemment lie mes mains afin que les types de proxy 'FTP' et 'SOCKS' ne soient pas dans la portée).Utilisation de Java pour FTP Commande Put sur Squid Erreur proxy HTTP

Alors, voici mon code:

     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 

Je continue à obtenir cette exception:

Java appel terminé par uncaught exception Java : java.net.ProtocolException: ne peut pas écrire à un URLConnection si doOutput = false - appeler setDoOutput (true)

Donc, j'ai essayé cela avec un FTPURLConnection etc et ont eu le même problème.

Lors du débogage cela, il semble qu'il n'y a pas moins de trois variables qui sont appelées doOutput dans le ftpConn.
seul est modifiable (alors que les deux autres ne sont pas)

Le premier (et il semble que celui qui est retourné par la getDoOutput) retourne vrai après le réglage de la ftpConn.setDoOutput (vrai);.

regardant par-dessus le code source pour HttpURLConnection:

public synchronized OutputStream getOutputStream() 
        throws IOException { 

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

Donnant sur la manipulation Proxy dans FtpURLConnection me conduit à croire que quand il détermine que vous utilisez un proxy HTTP, il fait passer le traitement à la HttpURLConnection.

C'est là que je pense que la déconnexion se produit (soit pour moi ou la bibliothèque ou le proxy).

Ai-je manqué quelque part de définir le setDoOutput ou autre chose?

J'ai réussi à sortir du proxy pour les GET, mais les PUT sont tous ÉCHOUÉS sur le doOutput.

Merci pour toute aide ou pointeurs pour que cela fonctionne.

P.S. J'utilise Java 1.5.0_10 (nous sommes ici pour rester cohérent avec d'autres applications)

+0

bien trouvé qu'il s'agit d'un bug (bug 6519647) dans metalink. la solution de contournement utilise à peu près quelque chose de différent! Je ne sais pas comment marquer cela comme correct (puisque c'est le mien) et je ne pense pas que la fermeture soit nécessairement la bonne (puisqu'elle a une résolution) – Harrison

Répondre

0

bien trouvé c'est un bug (bug 6519647) dans metalink. la solution de contournement utilise à peu près quelque chose de différent!

(ce bug persiste, peu importe la façon dont le proxy est (avec/wihtout le « http ». Et même par la classe proxy)

désolé pour le modifier en double/réponse, ceci est ma première « réponse » à ma propre question.

a basculé sur ftp4j mais continue à rencontrer des problèmes de proxy squid (ce qui est une toute autre histoire).

Questions connexes