0

私は時々ユーザーがログインする前に選択する必要があるHTTP Basicサーバーを持っています。これは、HTTPでjsonの内容のHTTPレスポンス401をHTTPクライアントがユーザーに表示する必要があるデータを提供することができます。NSURLConnectionDelegateでHTTPボディを取得する方法willSendRequestForAuthenticationChallenge

しかし、私はwillSendRequestForAuthenticationChallengeメソッドでレスポンスボディのコンテンツを取得する方法を世界中で理解できません。私はBasic Authを使い、usr/pwdをhttp "Authorization"ヘッダとして直接提供しているので、ユーザがログインできないとき、または選択をしなければならないときはいつでも呼び出されます。

私はNSURLAuthenticationChallengeを持っていますが、そのオブジェクトから本文を読み取る方法はありません。

誰かが助けてくれたら本当に感謝しています!

+0

セクション1.2の最後の段落に続くRFC(https://tools.ietf.org/html/rfc2617)を参照してください。この仕様では、応答内のカップルの明示的なヘッダーを超えて何かが呼び出されているかのようには見えません.SNURLAuthenticationChallengeではSDKがそのことを抽象化しているようです。あなたはあなたのリクエストエラーロジックで401を処理し、そこにあるレスポンスボディを確認して、プロンプトユーザを確認してから、新しいリクエストを開始することができますか? – danh

答えて

0

URLリクエストでは、身体データをダウンロードする前に認証を取り消して再試行するかどうかを決定する可能性があるため、要求プロセスのその時点で身体データを取得することはできません。それはタイミングの問題です。あなたは何ができるか

は次のとおりです。

  • 要求が資格なしで完了できるようにします。これにより、URL接続で応答本体がダウンロードされます(エラーメッセージ)。サポートコードは401応答を認識し、本文を解析し、再試行で資格情報を提供することができます。それは

代わりにアプリの残りの部分に透明になるよう

  • は、必要に応じてカスタムNSURLProtocolクラスで上記のロジックをラップ:

    • カスタムHTTPヘッダー内の追加データを提供します。おそらく保護スペースのfailureResponseメソッドからNSURLResponseオブジェクトを取得し、そこからヘッダーを取得できると思います。

    私はその時点でヘッダーフィールドを取得できるとは確信していません。確かに、前に説明したように、NSURLProtocolまたはカスタムラッパーコードで行うことができます。

  • +0

    お返事ありがとうございます。私が理解しているところでは、エラーコードの応答にはまだ本体があります。私がfirefoxのrestclientで実行すると、再度ログインするように求められても私は本文を見ることができます。しかし、私はヘッダーに入れようと思うでしょう... – Mathias

    +0

    彼らは絶対に体を持つことができます。私が作ろうとしていたのは、ロードプロセスのポイントで、NSURLConnection/NSURLSessionが認証について尋ねる時点で、ボディをまだダウンロードしていませんが、すでにヘッダを受け取りました(私は思っています)。 – dgatwood

    関連する問題