如何使用NSURLSession进入本网站?

时间:2014-03-21 14:57:22

标签: ios http nsurl

我尝试使用NSURLSession登录Mistar(或AFNetworking,或其他什么,似乎合适) 继承我的代码:

- (void)loginToMistar {

   //Create POST request
   NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init];

   //Create and send request
   NSURL *url = [NSURL URLWithString:@"https://mistar.oakland.k12.mi.us/novi/StudentPortal/Home/Login"];
   NSURLRequest *urlRequest = [NSURLRequest requestWithURL:url];
   NSString *postString = [NSString stringWithFormat:@"Pin=%@&Password=%@", @"20005012", @"wildcats"];
   NSData * postBody = [postString dataUsingEncoding:NSUTF8StringEncoding];
   [request setHTTPBody:postBody];

   [request addValue:@"application/x-www-form-urlencoded; charset=utf-8" forHTTPHeaderField:@"Content-Type"];

   NSOperationQueue *queue = [[NSOperationQueue alloc] init];

   [NSURLConnection sendAsynchronousRequest:urlRequest queue:queue completionHandler:^(NSURLResponse *response, NSData *data, NSError *error) {
        // do whatever with the data...and errors
        if ([data length] > 0 && error == nil) {
             NSString *loggedInPage = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
             NSLog(loggedInPage);
        }
         else {
            NSLog(@"error");
        }
    }];
}

登录,并返回页面的HTML内容,说明我的登录失败。所以它成功传递了一个请求,但它失败了,而是给了Error with login页面。

我的要求出了什么问题?

2 个答案:

答案 0 :(得分:1)

由于您要将数据发布到服务器,因此必须为NSMutableURLRequest对象调用此方法 -

[urlRequest setHTTPMethod:@“POST”];

默认的HTTP方法是“GET”。阅读更多 -

https://developer.apple.com/library/ios/documentation/cocoa/reference/foundation/Classes/NSMutableURLRequest_Class/Reference/Reference.html#//apple_ref/occ/instm/NSMutableURLRequest/setHTTPMethod

答案 1 :(得分:0)

如果您使用NSURLConnectionsendAsynchronousRequest:queue:completionHandler:便利 API并要求身份验证,则必须以适当的方式传递URL中的凭据。这意味着服务器支持这种天真的身份验证方法。

为了更好地控制身份验证过程,您应该使用NSURLSessionNSURLConnection使用委托。

另请参阅:sendAsynchronousRequest:queue:completionHandler:

URL Loading System Programming Guide