1

私はJavaに少し慣れていますが、SQUID HTTPプロキシを介してローカルファイルをリモートFTPサーバーにアップロードしようとしたときに問題に遭遇しました(これは明らかに私の手を縛っているので、「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: doOutput=false の場合、URLConnection に書き込めません - setDoOutput(true) を呼び出します

だから私はこれをFTPURLConnectionなどで試しましたが、同じ問題がありました。

これをデバッグすると、 ftpConn内に doOutputと呼ばれる 3 つ以上の変数があるように見えます。
編集できるのは 1 つだけです (他の 2 つは編集できません)。

最初のもの (および getDoOutput を介して返されるもののようです)は、 ftpConn.setDoOutput(true);の設定後に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での Proxy 処理を調べると、HTTP Proxy を使用していると判断された場合、処理が HttpURLConnection に渡されると思われます。

これは、切断が発生していると思われる場所です(私、ライブラリ、またはプロキシのいずれか)。

setDoOutputなどを設定する方法がありませんか?

GET のプロキシから正常にトンネリングできましたが、doOutput で PUT がすべて失敗しています。

これを機能させるための助けや指針をありがとう。

PS私はJava 1.5.0_10を使用しています(他のアプリケーションとの一貫性を保つためにここにいます)

4

1 に答える 1

0

これがメタリンクのバグ (バグ 6519647) であることがよくわかりました。回避策は、ほとんど別のものを使用することです!

(このバグは、プロキシがどのように設定されていても ("http." の有無にかかわらず、プロキシ クラスを介しても) 持続します)

編集/回答が重複して申し訳ありません。これは私自身の質問に対する私の最初の「回答」です。

ftp4j に切り替えましたが、まだ squid プロキシの問題が発生しています (これはまったく別の話です)。

于 2011-06-27T15:38:10.180 に答える