2014-03-26 69 views
0

我試圖在iOS應用程序enter image description here嘗試使用NSURL

我已經登錄到使用NSURLConnection網站申請在objC GET請求,下面的代碼是在完成處理程序:

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瀏覽器的響應(最值得注意的是,日e Content-Length - 我只有234的長度 - 我希望像31189那樣)。

挖周圍的Chrome開發者工具的Network部分,看着就當我嘗試請求數據什麼的鉻是: enter image description here

鉻,當我點擊按鈕獲取一些數據,使得2 GET請求(兩張圖片)。第一個獲取我想要爲我的應用獲得的數據,第二個獲得的數據看起來好像沒有做任何事情。但第二個chrome請求得到的響應與我嘗試從iOS發出第一個chrome請求時得到的響應相同(第一張圖片應返回31189的Content-Length)。

所以我不知道我在做什麼錯我的NSURLConnection

+0

Response = {URL:https://mistar.oakland.k12.mi.us/novi/StudentPortal/Home/LoadProfileData/Assignments?_ = 1395809728907} {狀態碼:200,頭部「Cache-Control」=「public,max-age = 0」; Connection =「Keep-Alive」; 「Content-Length」= 234; 「Content-Type」=「text/html; charset = utf-8」; Date =「Wed,26 Mar 2014 06:11:35 GMT」; 到期=「Wed,26 Mar 2014 06:11:35 GMT」; 「Last-Modified」=「Wed,26 Mar 2014 06:11:35 GMT」;; Server =「Microsoft-IIS/7.5」; Vary =「*」; 「X-AspNetMvc-Version」=「4.0」; 「X-Powered-By」=「ASP.NET」; }} – AndrewSB

+0

我只是再次查看了這兩個請求URL,我想我錯過了一些東西。它們都看起來像是一個'GET'請求到'https://mistar.oakland.k12.mi.us/novi/StudentPortal/Home/LoadProfileData/Assignments?_ = 1395809728907'。 – AndrewSB

+0

對不起。

\t
\t \t Student Profile \t
\t \t
AndrewSB

回答

0

做一個小測試,我已經證實,你必須做到以下四個NSURLConnectionNSURLSession請求:在/novi/StudentPortal/Home/PortalMainPage

  • 登錄在/novi/StudentPortal/Home/Login

  • 轉到門戶頁面

  • 設置學生橫幅/novi/StudentPortal/StudentBanner/SetStudentBanner/XXX,其中XXX是行關聯的id值d與門戶頁面中的特定學生聯繫

  • 請求novi/StudentPortal/Home/LoadProfileData/Assignments(不需要?_=xxxx參數;它看起來像AjaxLoad的Javascript使用的跟蹤請求,但我們並不擔心,在這裏)

我注意到,如果你跳過其中的任意一種中間的兩個步驟,對請求分配將失敗,如你的問題所示。 (坦率地說,這讓我質疑你正在接口的系統中的一些設計選擇,但我認爲你沒有發言權。)但是,如果你全部四個,你會得到與作業相關的HTML。順便說一下,在解析這個HTML時,你可能傾向於使用NSXMLParser或正則表達式,但我建議你考慮Hpple(參見Ray Wenderlich的article on parsing HTML)。

+0

對,所以我可以到第3步沒有真正的問題,我有三個嵌套的'NSURLConnection's 。我無法獲得最後一步的'?= xxxx'。因此,我*應該*能夠下載相關數據 – AndrewSB

+0

關於如何從'AjaxLoad'獲取最後一個數字的任何想法? – AndrewSB

+0

@AndrewSB您不需要'?= xxx'作爲分配URL。對於'SetStudentBanner'(只是將'/ xxx'加到最後),你必須從'PortalMainPage'解析HTML。 – Rob