2016-04-03 67 views
0

我試圖從存儲我所有成績的網站上拉我的學校成績,但我在使用HTTP請求登錄時遇到問題,並且拉下了下一頁的信息。任何幫助表示讚賞:)如何取得網站上的成績,並使用POST請求執行登錄?

override func viewDidLoad() { 
    super.viewDidLoad() 

    let myUrl = NSURL(string: "https://homeaccess.katyisd.org/HomeAccess/Account/LogOn?ReturnUrl=%2fhomeaccess%2f") 
    let request = NSMutableURLRequest(URL: myUrl!) 
    request.HTTPMethod = "POST" 
    let postString = "User_Name=**hidden**&Password=**hidden**" 
    request.HTTPBody = postString.dataUsingEncoding(NSUTF8StringEncoding) 
    let task = NSURLSession.sharedSession().dataTaskWithRequest(request){ 
     data,response,error in 
     if(error != nil){ 
      print("error=\(error)") 
      return 
     } 

     print("response = \(response)") 

     // Print out response body 
     let responseString = NSString(data: data!, encoding: NSUTF8StringEncoding) 
     print("responseString = \(responseString)") 

     //Let’s convert response sent from a server side script to a NSDictionary object: 

     do{ 
     var myJSON = try NSJSONSerialization.JSONObjectWithData(data!, options: .MutableLeaves) as? NSDictionary 

     if let parseJSON = myJSON { 
      // Now we can access value of First Name by its key 
      var firstNameValue = parseJSON["User_Name"] as? String 
      print("firstNameValue: \(firstNameValue)") 
     } 


     }catch{ 
      print(error) 
     } 
    } 

} 
+0

如果沒有登錄數據,很難判斷出現什麼問題......是不是有什麼問題?你會得到什麼錯誤?發生了什麼問題?你到底有什麼問題? –

+0

沒有打印在控制檯內 – user6032625

+0

沒問題。這是有道理的,因爲你根本沒有觸發請求。在代碼末尾添加'task.resume()'... –

回答

-1

在代碼的末尾添加task.resume()。還有以下添加到您的info.plist文件:

info.plist

+0

I得到這個錯誤http://puu.sh/o551X/87214a65bf.png – user6032625

+0

是啊,看起來像你不能讓你的嘗試後的請求。我得到一個狀態500(內部服務器錯誤)... –

+0

任何替代品? – user6032625

0
  1. 首先,你需要task.resume(),以啓動連接負載定義任務後,否則對象將被創建並沒有什麼會真正發生。根據this error you posted,您嘗試訪問的網站上存在SSL驗證錯誤。最安全的選擇是修復網站上的SSL,但我認爲在這種情況下超出了您的控制範圍。正如@安德烈所建議的,更簡單的解決方法是通過在您的info.plist中添加"App Transport Security Settings" > "Allow Arbitrary Loads" = YES來繞過SSL錯誤。或者,如果您僅使用一個域,則繞過NSExceptionDomains中的特定域。有關更多信息,請參閱this question

  2. 根據this error you posted,發生JSON解析錯誤。它目前正在被catch塊捕獲並打印,所以數據實際上沒有處理。在你的情況下,這是因爲Home Access Center的響應是HTML而不是JSON,因此JSON解析器失敗。您可能正在尋找一個HTML解析器。 Swift沒有內置的;查看this question,瞭解一些開源選項的示例。

我實際上已經創建了一個與Home Access Center接口的程序。可悲的是,沒有公共API可用 - API通常返回JSON,這更容易處理。相反,您需要使用HTML解析器來分析用於人類用戶和Cookie的頁面,以僞造人類用戶正在登錄。

+1

#2 - 不要對Info.plist進行更改。允許所有任意負載修復一個特定問題是不合適的。 – rmaddy

+0

@rmaddy真的,我修改了答案,指出它不是最好的方法,但最簡單的方法。我也假設他無法訪問域本身並從源頭解決SSL問題。 – BradzTech