newby IOS:无法重定向网址

时间:2012-11-12 15:40:21

标签: ios5 nsurlconnection xcode4.4

这是我的第一个IOS项目。登录工作很难。该网站有一个meta_refresh到另一个网址。我试图在meta_refresh中向url发送另一个请求但是应用程序只是挂起。我确定我做错了但是我正在使用XCode 4.4因此很多NSURLConnection委托方法已被弃用。

这就是我正在做的事情:

NSString *urlAsString = baseURL;
urlAsString = [urlAsString stringByAppendingString:@"?user[login]=username"];
urlAsString = [urlAsString stringByAppendingString:@"&user[password]=password"];
urlAsString = [urlAsString stringByAppendingString:@"&origin=splash"];

NSURL *url = [NSURL URLWithString:urlAsString];
NSMutableURLRequest *urlRequest = [NSMutableURLRequest requestWithURL:url];
[urlRequest setTimeoutInterval:30.0f];
[urlRequest setHTTPMethod:@"POST"];
NSURLResponse *response = nil;
NSError *error = nil;

NSData *data = [NSURLConnection sendSynchronousRequest:urlRequest returningResponse:&response error:&error];    

if([data length] > 0 && error == nil){
    NSString *html = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
    NSLog(@"HTML = %@", html);
    NSRange obj = [html rangeOfString:@"http-equiv=\"refresh\""];
    NSInteger len = obj.length;
} else if([data length] == 0 && error == nil) {
    NSLog(@"No data was returned.");

} else {
    NSLog(@"Error happened = %@", error);
}

这是我得到的:

另一个问题是我读过我应该使用异步连接。麻烦的是我需要从网站上抓取的数据显示在屏幕上。如果我在返回数据之前显示屏幕,那么我将不会有任何数据 - 或者我不明白这是如何工作的?

感谢。 --Tony

1 个答案:

答案 0 :(得分:1)

我想也许你是混合的东西。您正在使用GET值设置字符串URL,然后将HTTPMethod设置为POST,我不知道这是否可以正常工作。

这是我必须用POST发送值的代码:

NSString *post = [NSString stringWithFormat:@"&user_login=%@&user_password=%@&origin=%@,username,password, splash];

NSData *postData = [post dataUsingEncoding:NSASCIIStringEncoding allowLossyConversion:YES];
NSString *postLength = [NSString stringWithFormat:@"%d",[postData length]];
NSMutableURLRequest *request = [[[NSMutableURLRequest alloc] init] autorelease];
[request setURL:[NSURL URLWithString:[NSString stringWithFormat:baseURL]]];

[request setHTTPMethod:@"POST"];

[request setValue:postLength forHTTPHeaderField:@"Content-Length"];
[request setHTTPBody:postData];

NSURLConnection *conn = [[NSURLConnection alloc]initWithRequest:request delegate:self];