私は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を使用しています(他のアプリケーションとの一貫性を保つためにここにいます)