私は問題を説明する前にいくつかの文脈を設定しなければならないと思います。HTTP Webメソッド名は大文字でなければなりませんか?
私のiOSアプリケーションでは、NSOperationQueueを使用して独自のHTTPClientを作成しています.NSRunLoopCommonModesを使用してNSURLRequestとNSURLConnectionをNSRunLoopCommonModesでラップすると、UIをブロックしません。
認証を必要としないWebサービスが正常に動作し、データを返すが、認証が必要なWebサービスがステータスコード503 - Service Unavailableエラーを返すことに気付きました。
Webサービスのいずれかを呼び出す前に、Webビューを使用して複数のURLリダイレクトを処理して認証プロセスを完了し、最後に成功したら、Cookieを設定しています。したがって、このクッキーは、認証が必要なWebサービスに対して自動的に送信され、認証が必要なWebサービスは理想的に動作するはずです。これはNSOperationQueueのない私の以前のHTTPClientの場合でした。私は明示的にクッキーを渡さなかった。
私は多くのデバッグを行い、問題はそれほど複雑ではなく愚かであると最終的に考えました。実際の問題は、私のURLRequestのHTTPメソッド名を送信する際に、大文字ではなくパスカルの場合にメソッド名を渡していることでした。
したがって、[myURLRequest setHTTPMethod:@ "Get"]認証が必要なWebサービスは機能しませんが、[myURLRequest setHTTPMethod:@ "GET"]のようにメソッド名を大文字に変更した後、動作し始めました。
だから、認証で問題ではなくウェブメソッド名であることが判明しました。
私は2つのことについて不思議です: 1)ウェブメソッド名は常に大文字でなければならないというルールですか?これはiOS固有のものですか?ここでは、認証を必要としなかったWebサービスが、大文字でもないWebメソッド名でもうまく動作していたことに注目してください。
2)認証成功時に設定される認証Cookieは、NSURLRequestとともに明示的に送信されることはありません。では、iOSはURLリクエストと一緒に自動的にどのように送信しますか?
なぜドライブバイダウンの投票? – coneybeare
Coneybeare、答えに感謝します。質問2)の答えについても知っている場合は、そのことをもっと光らせてください。 – indiantroy