我正在尝试从存储我所有成绩的网站上取得学校成绩,但我无法使用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)
}
}
}
答案 0 :(得分:0)
首先,在定义任务后需要task.resume()
才能启动连接加载,否则将创建对象,实际上什么都不会发生。
根据this error you posted,您尝试访问的网站上存在SSL验证错误。最安全的选择是在网站上修复SSL,但我认为在这种情况下你无法控制。更简单的解决方法是在"App Transport Security Settings" > "Allow Arbitrary Loads" = YES
中添加info.plist
来绕过SSL错误,正如@André建议的那样。或者,如果您只使用一个域,请绕过NSExceptionDomains
中的特定域。有关详细信息,请参阅this question。
根据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 :(得分:-1)