2

現在、AFNetworking を使用して HTTP リクエストを送信しています。サーバーは現在、失敗と成功の両方のシナリオで別の HTML ページへのリダイレクトで応答するように設定されています (クライアントはサーバーを制御しており、多くの官僚機構なしにその動作を変更することはできません)。

成功したHTMLページにリダイレクトされたときにキャッチする必要があり、リダイレクトのために別のHTTPリクエストのあとがきを自動的に投稿しないでください。

- (void) fetchHttpRequest: (void (^)(id result)) completionBlock
               errorBlock: (void (^)(NSError * error, id result)) errorBlock
{
NSMutableURLRequest * urlRequest = [NSMutableURLRequest requestWithURL:
                                    [NSURL URLWithString:@"/"]];// replace with correct url

AFHTTPRequestOperation * operation = [[AFHTTPRequestOperation alloc]
                                      initWithRequest:urlRequest];
[operation setCompletionBlockWithSuccess:
 ^(AFHTTPRequestOperation * operation, id result)
 {
     completionBlock(result);
 }
                                 failure:
 ^(AFHTTPRequestOperation * operation, NSError *error)
 {
     errorBlock(error, nil);
 }];
// check the redirection
[operation setRedirectResponseBlock:
 ^NSURLRequest *(NSURLConnection *connection, NSURLRequest *request,
                 NSURLResponse *redirectResponse)
 {
     NSString * reqUrlPath = @"/";// replace with success URL
     if ([reqUrlPath isEqualToString:[[request URL] path]])
     {
         // success case
         return nil;
     }
     else
     {
         // failure case
         return request;
     }
 }];
[operation start];
}

操作の完了ブロックは、アプリが既にリダイレクトされるまで成功をキャッチしないため、失敗します。

リダイレクト ブロックの に到達し// success caseますが、戻り値の型が必要なため、コードがその場所の次のページに移動しようとするのを止めることはできません。したがって、 を定義するcompletionBlockと、完了ではなくエラーが返されます。

4

0 に答える 0