3

我在这里遇到了一个奇怪的问题,很惊讶我没有发现其他人有同样的问题。

AFNetworking用来做一个AFJSONRequestOperation.

它在第一次建立网络连接时工作。但是,一旦建立网络连接,相同的代码就会失败并显示“错误的 URL”错误。

奇怪的是,该应用程序在失败之前甚至从未 ping 服务器,我正在使用 Charles 来嗅探所有请求。

有没有其他人经历过这个?

作为参考,这里是代码:

  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];
4

3 回答 3

5

你真的应该path像这样编码你的 URL 字符串:

NSString* escapedUrlString =[path stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
于 2012-11-06T17:21:36.550 回答
5

据我了解AFHTTPClient,您向它提供了一个baseURL基本URL,您指定的所有路径都将附加到该 URL 。然后当你提供一个路径时,你只提供这个路径的相对部分

因此,如果您在http://www.example.com/webservice/有一个 WebService,它有一些方法/listAll?n=10,例如,您将只提供参数"listAll"的参数和参数的字典。pathrequestWithMethod:path:parameters:@{ @"n" : @10 }parameters

无论如何,您已经JOIN_URL在实例化时提供了您AFHTTPClient的,所以如果您JOIN_URL在路径中再次传递它,它将在AFHTTPClient内部构建的 URL 中出现两次!

于 2012-11-06T17:28:46.007 回答
0

目标-C:

[query stringByAddingPercentEncodingWithAllowedCharacters:
        [NSCharacterSet URLQueryAllowedCharacterSet]];

迅速:

query.stringByAddingPercentEncodingWithAllowedCharacters(
       NSCharacterSet.URLQueryAllowedCharacterSet())
于 2015-11-06T20:31:53.163 回答