特定のリクエストに対して、すべてが正常に行われた場合はステータスコード200を返し、ユーザーが認証トークンに基づいてログインしていない場合は401を返すWebAPIがあります。応答ステータスが200の場合はすべて正常に機能しますが、応答ステータスが401の場合は正しく機能しないようで、応答がnilのときにコード-1012の接続エラーが返されます。
したがって、次のコード:
[NSURLConnection sendAsynchronousRequest:request queue:queue completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) {
NSLog(@"%@", response);
NSLog(@"%@", connectionError);
NSHTTPURLResponse *httpResponse = (NSHTTPURLResponse *) response;
int statusCode = (int)[httpResponse statusCode];
NSLog(@"response status code: %d", statusCode);
が表示されます
2015-04-01 15:58:18.511 MyProject[3618:694604] <NSHTTPURLResponse: 0x155facc0> { URL: *SOME_URL* } { status code: 200, headers {
"Access-Control-Allow-Headers" = "Content-Type, Accept, X-Requested-With";
"Access-Control-Allow-Methods" = "POST, GET, PUT, UPDATE, OPTIONS";
"Access-Control-Allow-Origin" = "*";
Connection = "keep-alive";
"Content-Type" = "application/json";
Date = "Wed, 01 Apr 2015 12:58:14 GMT";
Server = "Wildfly 8";
"Transfer-Encoding" = Identity;
"X-Powered-By" = "Undertow 1";
} }
2015-04-01 15:58:18.513 MyProject[3618:694604] (null)
2015-04-01 15:58:18.513 MyProject[3618:694604] response status code: 200
応答ステータスが200の場合、ステータスコードが401の場合、次のようになります。
2015-04-01 16:05:55.988 MyProject[3633:695836] (null)
2015-04-01 16:05:55.992 MyProject[3633:695836] Error Domain=NSURLErrorDomain Code=-1012 "The operation couldn’t be completed. (NSURLErrorDomain error -1012.)" UserInfo=0x146137c0 {NSErrorFailingURLKey=*SOME_URL*, NSErrorFailingURLStringKey=*SOME_URL*, NSUnderlyingError=0x1459e6d0 "The operation couldn’t be completed. (kCFErrorDomainCFNetwork error -1012.)"}
2015-04-01 16:05:55.992 MyProject[3633:695836] response status code: 0
PostmanまたはAndroidデバイスを使用して同じリクエストを実行すると、次のヘッダー(Postmanからコピー)を含むステータスコード401が表示されます。
Connection → keep-alive
Content-Length → 30
Content-Type → application/json
Date → Wed, 01 Apr 2015 13:07:34 GMT
Server → Wildfly 8
X-Powered-By → Undertow 1
正確な応答ステータスを提供できる修正またはライブラリはありますか?-1012エラーについて少し検索しましたが、多くを見つけることができなかったので、それを基にしたくありません。
編集:少し調べた後、Applのドキュメントで次のステートメントを見つけました:「リクエストをダウンロードするために認証が必要な場合、必要な資格情報をURLの一部として指定する必要があります。認証が失敗した場合、または資格情報が欠落している場合は、接続は資格情報なしで続行しようとします。」
しかし、このエラーが401ステータスの後に発生するかどうかをどのように知ることができますか?別の種類のリクエストの後に表示できますか?
401のステータスコードを取得するためには、私はあなたがプロトコルを実装する必要があると思うNSURLConnectionDelegate
当時とconnection:didReceiveAuthenticationChallenge:
。
したがって、おそらくを使用して、デリゲートも渡す必要があります[NSURLConnection connectionWithRequest:request delegate:self]
。
また、認証チャレンジを実装しようとしない場合は、常に200のステータスコードを返しますが、jsonの内容は異なります。
それが役立つことを願っています。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加