如何通过NSURLConnection发送大字符串

时间:2013-05-23 05:44:20

标签: ios nsurlconnection nsurlrequest

这是我的代码。

- (void)loadData:(NSString *)url {
    NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:url]];
    [[NSURLConnection alloc] initWithRequest:request delegate:self];
}

- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response {
    NSLog(@"connection found---------");
}

- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data {
    NSLog(@"reciving data---------");
}

- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error {
    NSLog(@"connection fail---------");
    [self.pddelegate connectionError];
}

- (void)connectionDidFinishLoading:(NSURLConnection *)connection {
    NSLog(@"data posting done---------");
    [self.pddelegate dataPosted];
}

如果url变大并且日志中的连接失败,则无效。

url=@".......order_details&admin=29&tableid=89&waiter_id=18&items=MzQ6MSwxMToxLDMzOjEsNjc6MSwzOToxLDY5OjEsNTY6MSw2ODoxLDg6MSw1NToxLDYyOjEsNzY6MSw0MToxLDIwOjEsNjE6MQ=="

3 个答案:

答案 0 :(得分:0)

请参阅此SO帖子获取类型请求长度What is the maximum length of a URL in different browsers?

用于发送大字符串使用POST类型请求而不是GET类型。

答案 1 :(得分:0)

我们有两种方法用于发送数据。 1. GET方法:仅用于固定长度或有限长度的字符串。 2. POST方法:用于在比较get方法时发送更多字符串。

我给出了使用PostMethod的示例。

NSString *post =[[NSString alloc] initWithFormat:@"%@",YourString];
NSURL *url=[NSURL URLWithString:*@"YourURL like www.google.com"*];
NSData *postData = [post dataUsingEncoding:NSASCIIStringEncoding allowLossyConversion:YES];
NSString *postLength = [NSString stringWithFormat:@"%d", [postData length]];
NSMutableURLRequest *request = [[[NSMutableURLRequest alloc] init] autorelease];
[request setURL:url];
[request setHTTPMethod:@"POST"];
[request setValue:postLength forHTTPHeaderField:@"Content-Length"];
[request setValue: @"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"];
[request setHTTPBody:postData];
request.timeoutInterval = 60;    
NSError *error = nil;
NSURLResponse *response;   
NSData *urlData=[NSURLConnection sendSynchronousRequest:request 

returningResponse:&response error:&error];
NSString *errStr = _stringEmpty;
@try { errStr = [error localizedDescription]; }@catch (NSException * exception){ }

如果发生任何错误,errStr将显示错误。

答案 2 :(得分:0)

过去,我在iOS中使用了一些长度约为2000个字符的URL,没有问题。 NSURL,NSURLRequest和NSURLConnection都管理得很好。如果您的URL比此短,问题可能不是由于它的长度,而是与URL的构造方式有关。