GET请求使用的参数太多-iOS

GET请求使用的参数太多-iOS,ios,http,get,Ios,Http,Get,我正在尝试在NSMutableURLRequest中加载一个URL,以获取如下请求: NSString *serverAddress = [NSString stringWithFormat:@"http://test.us.to:8080/api/offers?altId=%@&provider=%@&otherId=%@&tenantId=%@&createdAt=%@&otherOfferId=%@&postId=%@&pageI

我正在尝试在NSMutableURLRequest中加载一个URL,以获取如下请求:

 NSString *serverAddress =  [NSString stringWithFormat:@"http://test.us.to:8080/api/offers?altId=%@&provider=%@&otherId=%@&tenantId=%@&createdAt=%@&otherOfferId=%@&postId=%@&pageId=%@&sourceUrl=%@&name=%@&description=%@&text=%@&category=%@&caption=%@&startTime=%@&expirationTime=%@&minPurchase=%@&numPurchases=%@&value=%@&percent=%@&count=%@&currency=%@&terms=%@&campaignId=%@&partnerId=%@&tenantIdAtPartner=%@&issuerName=%@&claimLimit=%@&onePerUser=%@&emailTemplateFile=%@",@"test",@"Facebook",@"",@"test",@"null",@"test",@"",@"",@"http://test.us.to/offers/harvester_summer13.html",@"Harvester",@"Harvester 2for1 TakeAway",@"Enjoy!",@"voucher",@"Harvester 2for1 TakeAway",[NSNumber numberWithInt:0],@"test",[NSNumber numberWithInt:0],[NSNumber numberWithInt:0],@"1000",[NSNumber numberWithInt:0],[NSNumber numberWithInt:0],@"GBP",@"",[NSNumber numberWithInt:1259],@"null" ,@"null" ,@"null",[NSNumber numberWithInt:100],[NSNumber numberWithBool:false],@"templates/test.vm"];

 NSURL *url = [NSURL URLWithString:[serverAddress urlEncodeUsingEncoding:NSUTF8StringEncoding]];

 NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url
                                                       cachePolicy:NSURLRequestReloadRevalidatingCacheData timeoutInterval:15.0];

 NSString *authStr = [NSString stringWithFormat:@"%@:%@", @"testuser", @"testpwd"];
 NSData *authData = [authStr dataUsingEncoding:NSUTF8StringEncoding];
 NSString *authValue = [NSString stringWithFormat:@"Basic %@", [authData base64EncodedStringWithOptions:0]];
 [request setValue:authValue forHTTPHeaderField:@"Authorization"];



 [request setHTTPMethod: @"GET"];

 NSError *requestError;
 NSURLResponse *urlResponse = nil;

 NSData *response1 = [NSURLConnection sendSynchronousRequest:request returningResponse:&urlResponse error:&requestError];
NSLog@output数据%@,响应1


我想我用url字符串加载了太多的参数。是否有更好的方法为GET请求传递参数?response1的当前输出为空。在我看来,问题在于您使用某种编码方法对整个url进行编码,但如果每个参数包含某些字符,则确实需要单独编码。例如:

NSString *serverAddress = @"http://test.us.to:8080/api/offers";

NSString *altIdParameter = [@"Escape?This?String?" urlEncodeUsingEncoding:NSUTF8StringEncoding];
NSString *aUrlParameter = [@"http://test.us.to/offers/harvester_summer13.html" urlEncodeUsingEncoding:NSUTF8StringEncoding];

NSString *getRequestUrl = [NSString stringWithFormat:%@?altId=%@&urlParam=%@", serverAddress, altIdParameter, aUrlParameter];

NSURL *url = [NSURL URLWithString:getRequestUrl];

在我看来,问题在于您正在使用某种编码方法对整个url进行编码,但是如果每个参数包含某些字符,您实际上只需要分别对其进行编码。例如:

NSString *serverAddress = @"http://test.us.to:8080/api/offers";

NSString *altIdParameter = [@"Escape?This?String?" urlEncodeUsingEncoding:NSUTF8StringEncoding];
NSString *aUrlParameter = [@"http://test.us.to/offers/harvester_summer13.html" urlEncodeUsingEncoding:NSUTF8StringEncoding];

NSString *getRequestUrl = [NSString stringWithFormat:%@?altId=%@&urlParam=%@", serverAddress, altIdParameter, aUrlParameter];

NSURL *url = [NSURL URLWithString:getRequestUrl];

你怎么知道你有太多的参数?GET请求没有限制吗?256个字符?看起来您正在对整个服务器地址字符串进行编码。您不应该只在url地址之后编码参数吗?没有具体的限制。这取决于web服务器和操作系统。我很确定Mobile Safari可以处理超过2500个字符的URL。与其重新发明轮子,不如看看AFNetworking中实现这一点的高度完善的方法:-参见AFQueryString from parameters swithencoding。你怎么知道你有太多的参数?GET请求没有限制吗?256个字符?看起来您正在对整个服务器地址字符串进行编码。您不应该只在url地址之后编码参数吗?没有具体的限制。这取决于web服务器和操作系统。我很确定Mobile Safari可以处理超过2500个字符的URL。与其重新发明轮子,不如看看AFNetworking中实现这一点的高度完善的方法:-参见AFQueryString from Parameters swithencoding。