Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/122.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 尝试使用NSURL在objC中发出GET请求_Javascript_Ios_Objective C_Google Chrome_Nsurlconnection - Fatal编程技术网

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

Javascript 尝试使用NSURL在objC中发出GET请求,javascript,ios,objective-c,google-chrome,nsurlconnection,Javascript,Ios,Objective C,Google Chrome,Nsurlconnection,我正在尝试在iOS应用程序中发出此请求 我已经使用NSURLConnection登录到该网站,以下代码在完成处理程序中: NSMutableURLRequest *requestGrades = [[NSMutableURLRequest alloc] initWithURL:[NSURL URLWithString:@"https://mistar.oakland.k12.mi.us/novi/StudentPortal/Home/LoadProfileData/Assignment

我正在尝试在iOS应用程序中发出此请求

我已经使用
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";
} } 
grade-Response={URL:https://mistar.oakland.k12.mi.us/novi/StudentPortal/Home/LoadProfileData/Assignments?_=1395809728907 }{状态代码:200,标题{
“缓存控制”=“公共,最大年龄=0”;
连接=“保持活动”;
“内容长度”=234;
“内容类型”=“文本/html;字符集=utf-8”;
日期=“2014年3月26日星期三05:21:52 GMT”;
Expires=“2014年3月26日星期三05:21:52 GMT”;
“上次修改”=“2014年3月26日星期三05:21:52 GMT”;
Server=“Microsoft IIS/7.5”;
Vary=“*”;
“X-AspNetMvc-Version”=“4.0”;
“X-Powered-By”=“ASP.NET”;
} } 
正如你所看到的,这与Chrome的反应不同(最明显的是,
内容长度
——我只得到了234——我希望得到31189这样的长度)

在chrome developer tools的
网络
部分,查看chrome在我尝试请求数据时所做的工作,是:

当我点击按钮获取一些数据时,Chrome会发出2个请求(两张图片)。第一个是我试图为我的应用程序获取的数据,第二个似乎什么都没做。但第二个chrome请求得到的响应与我尝试从iOS发出第一个chrome请求时得到的响应相同(第一张图片应返回31189的
内容长度


因此,我不确定我的
NSURLConnection

做了一些测试,我确认您必须执行以下四个
NSURLConnection
nsursession
请求:

  • 登录到
    /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)。

响应={URL:} {状态代码:200,标题{“Cache控件”=“Pube,Max As= 0”;连接=“保持生存”;“内容长度”=234;“内容类型”=“text/html;charset=utf-8”;Date=“Wed,2014年3月26日06:11:35 GMT”;Expires=“Wed,2014年3月26日06:11:35 GMT”;“上次修改”=“Wed,2014年3月26日06:11:35 GMT”;Server=“Microsoft IIS/7.5”;Vary=“*”;“X-AspNetMvc-Version”=“4.0”;“X-Powered-By”=“ASP.NET”;}我只是再次查看了两个请求URL,我想我遗漏了一些东西。它们看起来都像一个
GET
requests to
https://mistar.oakland.k12.mi.us/novi/StudentPortal/Home/LoadProfileData/Assignments?_=1395809728907
。对不起。学生档案请选择与学生档案完全相同的数据这很奇怪,因为我的requestNo中没有
True;
,我必须在那之前登录。我只是尝试了几次请求,发现号码
1395809728907
每次都不一样。但我不确定它来自何处。我在寻呼机的HTML中找不到它好的,所以我可以毫无问题地进入第三步。我有三个嵌套的
NSURLConnection
s。我无法在最后一步中获得
?=xxxx
。这样,我就可以下载相关数据了。关于如何从
AjaxLoad
获取最后一个数字的任何想法吗?@AndrewSB您不需要
?=xxx
来完成作业s URL。用于
设置学生横幅
(这只是在末尾添加
/xxx
),您必须从
PortalMainPage
解析HTML。我该怎么做呢?如果有帮助的话,下面是我的代码:链接到带有数字Roh的请求行,对吧。要从
SetStudentBanner
获取
用户ID
。我已经从该页面获取
HTML
,解析它并获取
使用里德
。在那之后,我陷入了困境