AFNetworking使用参数构建GET的URL

时间:2014-01-14 10:35:46

标签: ios iphone afnetworking afnetworking-2

在执行GET时,我想要传递给URL的一些参数

我用于构建URL的方法是:

AFHTTPClient *httpClient = [[AFHTTPClient alloc] initWithBaseURL: baseURL];

NSString* url = @"http://pretendurl.com/something";

NSMutableURLRequest *request = [httpClient requestWithMethod: @"GET"
                                                        path: url
                                                  parameters: params];

其中params是已填充的nsdictionary。

这会将参数添加到url文件中,但会将& format = json添加到URL的末尾。

我想知道如何在没有最后一块的情况下构建URL。我查看了AFNetworking源代码,但无法确定实际添加该位的位置。

提前致谢。

2 个答案:

答案 0 :(得分:1)

您可以使用像这样的函数将字典参数转换为查询网址

-(NSString*) getQueryUrlFromDictionary:(NSDictionary*) dict usingUrlEncoder:(BOOL)makeUrlEncoded
{
    if (dict == nil)
        return @"";

    NSMutableString* outputStr = [[NSMutableString alloc] initWithString:@""];
    int px = 0;
    for (NSString* key in dict) {

        NSString* param = (NSString*) [dict objectForKey:key];
        // using urlEncoding : look for NSString+URLEncoding.h implementation
        if (makeUrlEncoded)
            param = [param urlEncodeUsingEncoding:NSUTF8StringEncoding];

        [outputStr appendFormat:@"%@=%@",key,param];
        if ( px < ([dict count]-1 ) )
            [outputStr appendString:@"&"];

        px++;
    }

    return outputStr;
}

所以......

NSMutableURLRequest *request = [NSMutableURLRequest
                                  requestWithURL: baseURL
                                  cachePolicy: NSURLRequestReloadIgnoringLocalCacheData 
                                  timeoutInterval: 60.f];

[request setHTTPMethod:@"GET"];


NSString* paramString = [self getQueryUrlFromDictionary:params usingUrlEncoder:YES];

NSData *postData = [paramString dataUsingEncoding:NSUTF8StringEncoding allowLossyConversion:YES];

[request setHTTPBody:postData];

我使用这样的东西并且工作正常,希望它有所帮助

答案 1 :(得分:-1)

对我来说一切都应该可以正常工作,但试试这个:

AFHTTPClient *httpClient = [[AFHTTPClient alloc] initWithBaseURL:[NSURL URLWithString:"http://pretendurl.com"]];

 NSMutableURLRequest *request = [httpClient requestWithMethod:@"GET"
                                                                path:@"something"
                                                          parameters:params];