尝试使用NSURL在objC中发出GET请求

时间:2014-03-26 05:33:02

标签: javascript ios objective-c google-chrome nsurlconnection

我正在尝试在iOS应用enter image description here

中发出此请求

我已使用NSURLConnection登录网站,以下代码位于完成处理程序中:

NSMutableURLRequest *requestGrades = [[NSMutableURLRequest alloc] initWithURL:[NSURL URLWithString:@"https://mistar.oakland.k12.mi.us/novi/StudentPortal/Home/LoadProfileData/Assignments?_=1395809728907"]];
[requestGrades setHTTPMethod:@"GET"];
[NSURLConnection sendAsynchronousRequest:requestGrades queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse *gradeResponse, NSData *gradeData, NSError *gradeError) {

    if ([gradeData length] > 0 && gradeError == nil) {
        NSLog(@"%@",requestGrades);
        NSLog(@"grade Response = %@ \ngrade Data = %@", gradeResponse, [[NSString alloc] initWithData:gradeData encoding:NSUTF8StringEncoding]);
    } else {
        NSLog(@"grade Error = %@", gradeError);
    }
}];

我在我的应用中得到的回应类似于:

grade Response = <NSHTTPURLResponse: 0x109627500> { URL: https://mistar.oakland.k12.mi.us/novi/StudentPortal/Home/LoadProfileData/Assignments?_=1395809728907 } { status code: 200, headers {
    "Cache-Control" = "public, max-age=0";
    Connection = "Keep-Alive";
    "Content-Length" = 234;
    "Content-Type" = "text/html; charset=utf-8";
    Date = "Wed, 26 Mar 2014 05:21:52 GMT";
    Expires = "Wed, 26 Mar 2014 05:21:52 GMT";
    "Last-Modified" = "Wed, 26 Mar 2014 05:21:52 GMT";
    Server = "Microsoft-IIS/7.5";
    Vary = "*";
    "X-AspNetMvc-Version" = "4.0";
    "X-Powered-By" = "ASP.NET";
} } 

正如您所看到的,与Chrome的响应不同(最值得注意的是Content-Length - 我的长度只有234 - 我希望像31189这样的东西。)

在Chrome开发人员工具的Network部分中,查看我尝试请求数据时Chrome执行的操作是: enter image description here

Chrome,当我点击按钮获取一些数据时,会发出2 GET个请求(两张图片)。第一个获取我试图为我的应用程序获取的数据,第二个看起来好像它没有真正做任何事情。但是,当我尝试从iOS发出第一个chrome请求时,第二个chrome请求获得的响应与我得到的响应相同(第一张图片应返回31189的Content-Length)。

所以我不确定我的NSURLConnection

我做错了什么

1 个答案:

答案 0 :(得分:0)

进行一些测试,我确认您必须执行以下四个NSURLConnectionNSURLSession次请求:

  • 登录/novi/StudentPortal/Home/Login

  • 转到/novi/StudentPortal/Home/PortalMainPage

  • 的门户网站页面
  • 设置学生横幅/novi/StudentPortal/StudentBanner/SetStudentBanner/XXX,其中XXX是与门户网站页面中特定学生相关联的行的id

  • novi/StudentPortal/Home/LoadProfileData/Assignments请求分配(不需要?_=xxxx个参数;看起来像AjaxLoad使用Javascript来跟踪请求,但我们不会这里不得不担心)

我注意到,如果您跳过这两个中间步骤中的任何一个,则分配请求将失败,如您的问题所示。 (坦率地说,这让我质疑你与之交互的系统中的一些设计选择,但我认为你对此没有发言权。)但如果你做了所有这四个,你就会得到与之相关的HTML与作业。

顺便说一下,在解析这个HTML时,你可能倾向于使用NSXMLParser或正则表达式,但我建议你考虑Hpple(参见Ray Wenderlich&#39; s article on parsing HTML )。