Javascript 尝试使用NSURL在objC中发出GET请求
我正在尝试在iOS应用程序中发出此请求 我已经使用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
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
Javascript用来跟踪请求的,但我们不必担心这一点)AjaxLoad
顺便说一下,在解析这个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 tohttps://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
,解析它并获取使用里德
。在那之后,我陷入了困境