0

私はjava.net.HttpURLConnectionを使用しています。

最初に、URLConnection オブジェクトに関連付けられた OutputStream にポスト リクエストの本文を書き込みます。

それが終わったら、OutputStream を閉じてから、getInputStream() または getResponseCode() または getHeaderFields() を呼び出します。そのとき、提供された資格情報が有効であるか無効であるかを確認します。

ユーザー資格情報が何らかの理由で拒否された場合に、同じ投稿リクエストを再度行いたくない (そして、大きなファイルを含む可能性のあるコンテンツを再アップロードする必要がある) ため、これは問題です。

getResponseCode() または getHeaderFields() が呼び出された後に getOutputStream() を呼び出そうとすると例外がスローされるため、データをアップロードする前にユーザー資格情報が受け入れられたことを確認するにはどうすればよいですか?

これを回避する方法はありますか、それともサーバーの構成方法だけですか?

4

1 に答える 1

1

簡単に言えば、それはできません。

基本認証はステートレスです。POST/PUT を実行すると、ユーザー資格情報がその HTTP 要求のヘッダーとして送信されます。操作全体が完了するまで (つまり、データ ペイロードを送信した後)、それらは処理されません。

あなたが話していることを行うには、セッション管理を通じてログインとファイル/データのアップロードを別々に管理するWebサービスを作成する必要があり、最初に認証(何らかのセッショントークンを返す)してからデータを送信できます別の HTTP リクエストを介して。

編集して追加:実際には、認証も必要なものに GET を実行するだけで、これを回避できます。成功した場合、POST も成功し、2 つの要求の間でサーバー側で資格情報が無効になっていることがわかります。私はこれをお勧めしませんが、うまくいくでしょう。

于 2013-07-26T16:15:22.350 に答える