1

サード パーティの API を使用しているときに、カスタム レスポンス ヘッダーが特定の値に設定されている場合、すべてのトラフィックをキャンセルする必要があります。コード内でこのチェックを 1 回だけ実行するのに適した場所を見つけようとしています (正常に動作するすべての成功/失敗ブロックではありません)。私が理解していることから、これは-(void)enqueueHTTPRequestOperation:(AFHTTPRequestOperation *)operationカスタムAFHTTPClientサブクラスでオーバーライドすることで実行できますが、そのように実装すると:

-(void)enqueueHTTPRequestOperation:(AFHTTPRequestOperation *)operation
{
    NSLog(@"[REQUEST URL]\n%@\n", [operation.request.URL description]);
    NSLog(@"[RESPONSE HEADERS]\n%@\n", [[operation.response allHeaderFields] descriptionInStringsFileFormat]);

    [super enqueueHTTPRequestOperation:operation];
}

応答ヘッダーはnil. 誰でもそれを手伝ってもらえますか?

4

1 に答える 1

3

操作が作成され、 でキューに入れAFHTTPClientられた時点では、サーバーからの応答はありません。これは、要求操作が実際に実行されたときに割り当てられます。

すべてのトラフィックをキャンセルするという要件は、(少なくとも HTTP の慣例から外れている場合は) 異例のように思えますが、これは簡単に実現できます。

サブクラスに、リクエストを防止する必要があるかどうかを格納AFHTTPClientするプロパティを追加してから、 で使用します。次に、顕著な応答が存在する場合に前述のプロパティを設定するロジックとともに、指定された成功ブロックを実行するようにオーバーライドします。BOOLenqueueHTTPRequestOperationHTTPRequestOperationWithRequest:success:failure:

于 2012-07-03T18:42:38.800 に答える