私の現在の問題は、これと非常によく似ています。
downloadFile(URL)
新しい HttpURLConnection を作成し、それを開いて読み取り、結果を返す関数があります。同じ URL でこの関数を複数回呼び出すと、2 回目はほとんどの場合、応答コード -1 が返されます (ただし、例外はスローされません!!!)。
その質問の一番の答えは非常に役に立ちますが、私が理解しようとしていることがいくつかあります。
では、http.keepAlive を false に設定すると問題が解決する場合、正確には何を示しているのでしょうか? サーバーが http プロトコルに違反する方法で応答していることは? または、コードが何らかの形でプロトコルに違反している可能性が高いですか? トレースは何を教えてくれますか? 何を探すべきですか?
そして、これとの取引は何ですか:
エラーストリームからすべてを読み取る必要があります。そうしないと、次の接続が混乱し、それが -1 の原因になります。
これは、応答が何らかのタイプのエラー (応答コードは何ですか?) である場合、ストリームを完全に読み取る必要があることを意味しますか? また、http リクエストを試みるたびに、基本的に新しい接続を作成disconnect()
し、最後にそれを ing します。
ただし、私の場合、401などは取得していません。それは常に 200 です。しかし、私の 2 番目の接続はほとんどの場合失敗します。これは、私が読んでいないはずの他のデータがあることを意味しますか(エラーストリームを完全に読み取る必要があるのと同様の方法で)?
これに光を当てるのを手伝ってください。私が見逃している基本的な http プロトコルの理解があるように感じます。
PS Apache HttpClient だけを使用していた場合、これらすべてのプロトコルの詳細を処理する必要はありませんか? それは私のためにすべてを処理しますか?