AF Bad URL de networking

Tengo un problema extraño aquí, y me sorprendió no haber encontrado a nadie con el mismo problema.

Estoy usando AFNetworking para hacer una AFJSONRequestOperation .

Funciona la primera vez que se realiza una connection de networking. Sin embargo, el mismo código falla una vez que se realiza una connection de networking y muestra un error de 'URL incorrecta'.

La parte extraña es que la aplicación nunca pings el server antes de fallar, estoy usando a Charles para oler todas las requestes.

Alguien más ha experimentado esto?

Para reference, aquí está el código:

  NSURL *url = [NSURL URLWithString:JOIN_URL]; AFHTTPClient *httpClient = [[AFHTTPClient alloc] initWithBaseURL:url]; // httpClient.parameterEncoding = AFJSONParameterEncoding; NSString *path = [NSString stringWithFormat:@"%@?%@",JOIN_URL, getString]; NSMutableURLRequest *request = [httpClient requestWithMethod:@"GET" path:path parameters:nil]; AFJSONRequestOperation *operation = [AFJSONRequestOperation JSONRequestOperationWithRequest:request success:^(NSURLRequest *request, NSHTTPURLResponse *response, id JSON) { NSLog(@"SUCCESS JSON: %@", JSON); NSLog(@"RESPONSE URL: %@",response.URL); } failure:^(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error, id JSON) { NSLog(@"FAIL JSON: %@", JSON); NSLog(@"FAIL ERROR: %@", error.description); NSLog(@"RESPONSE URL: %@",response.URL); UIAlertView *alert = [[UIAlertView alloc]initWithTitle:@"Connection Error" message:@"Cannot connect now, please try again" delegate:nil cancelButtonTitle:@"Okay" otherButtonTitles: nil]; [alert show]; }]; [operation start]; 

Por lo que entiendo AFHTTPClient , le proporciona una baseURL que es la URL base a la que se agregará toda la ruta que especifique. Y luego, cuando proporciona una ruta, solo proporciona la parte relativa de esta ruta .

Entonces, si tiene un WebService en http://www.example.com/webservice/ que tiene algunos methods como /listAll?n=10 por ejemplo, solo proporcionará "listAll" al argumento de path de requestWithMethod:path:parameters: y un dictionary @{ @"n" : @10 } al argumento de parameters .

Ya proporcionó su JOIN_URL cuando JOIN_URL su AFHTTPClient todos modos, por lo que si pasa nuevamente ese JOIN_URL en la ruta, aparecerá dos veces en la URL AFHTTPClient internamente por el AFHTTPClient .

Realmente deberías codificar la cadena de la path URL de la siguiente manera:

 NSString* escapedUrlString =[path stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; 

C objective:

 [query stringByAddingPercentEncodingWithAllowedCharacters: [NSCharacterSet URLQueryAllowedCharacterSet]]; 

Rápido:

 query.stringByAddingPercentEncodingWithAllowedCharacters( NSCharacterSet.URLQueryAllowedCharacterSet())