如何在网站上提取成绩,并使用POST请求执行登录?

时间:2016-04-03 21:58:38

标签: ios swift httprequest

我正在尝试从存储我所有成绩的网站上取得学校成绩,但我无法使用HTTP请求登录,并提取下一页的信息。任何帮助表示赞赏:)

 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)
        }
    }

}

2 个答案:

答案 0 :(得分:0)

  1. 首先,在定义任务后需要task.resume()才能启动连接加载,否则将创建对象,实际上什么都不会发生。

  2. 根据this error you posted,您尝试访问的网站上存在SSL验证错误。最安全的选择是在网站上修复SSL,但我认为在这种情况下你无法控制。更简单的解决方法是在"App Transport Security Settings" > "Allow Arbitrary Loads" = YES中添加info.plist来绕过SSL错误,正如@André建议的那样。或者,如果您只使用一个域,请绕过NSExceptionDomains中的特定域。有关详细信息,请参阅this question

  3. 根据this error you posted,正在发生JSON解析错误。它当前被catch块捕获并打印,因此实际上不会处理数据。在您的情况下,这是因为Home Access Center的响应是HTML而不是JSON,因此JSON解析器失败。您可能正在寻找 HTML解析器。 Swift没有一个内置的;查看this question的一些示例开源选项。

  4. 我实际创建了一个与Home Access Center连接的程序。遗憾的是,没有可用的公共API - API通常返回JSON,这更容易使用。相反,您需要使用HTML解析器来分析针对人类用户的页面,并使用cookie来伪造人类用户正在登录的页面。

答案 1 :(得分:-1)

在代码末尾添加task.resume()。还要将以下内容添加到info.plist文件中:

info.plist