Jac*_*ack 0 xcode ios nsurlsession swift2
我试图用找到的SWIFT代码在这里找到自己的网站上这里,但响应与两个错误的html代码:"你必须输入密码!" 并且"您必须输入用户名!" 我是NSURLSession的新手并尝试更改字符串以进行身份验证,但没有任何方法可以更改响应.这是我的代码:
let config = NSURLSessionConfiguration.defaultSessionConfiguration()
let userPasswordString = "username@gmail.com:password"
let userPasswordData = userPasswordString.dataUsingEncoding(NSUTF8StringEncoding)
let base64EncodedCredential = userPasswordData!.base64EncodedStringWithOptions(NSDataBase64EncodingOptions.Encoding64CharacterLineLength)
let authString = "Basic \(base64EncodedCredential)"
config.HTTPAdditionalHeaders = ["Authorization" : authString]
let session = NSURLSession(configuration: config)
var running = false
let url = NSURL(string: "https://hac.chicousd.org/")
let task = session.dataTaskWithURL(url!) {
(let data, let response, let error) in
if (response as? NSHTTPURLResponse) != nil {
let dataString = NSString(data: data!, encoding: NSUTF8StringEncoding)
print(dataString)
}
running = false
}
running = true
task.resume()
while running {
print("waiting...")
sleep(1)
}
Run Code Online (Sandbox Code Playgroud)
这是在控制台响应中:
<!-- Start Error box -->
<div id="errorContainer" class="alert alert-danger" style="display:none;">
<button id="portalCloseError" type="button" class="close"> ×</button>
<span id="errorMessage" class="error" data-pw-error="You must enter a password!" data-username-error="You must enter a User Name!"></span>
</div> <!-- End Error box -->
Run Code Online (Sandbox Code Playgroud)
登录网站有两种方式:HTTP授权和表单.大多数网站使用更新,更友好的登录表单.HTTP授权仅在网站期望与用户程序交互时使用(否则,浏览器不计入此处).
在您编码之前,您需要在网站上搜索它发送的表单数据,因为知道是成功的一半:
Cmd + Opt + C打开开发人员控制台.观察页面发送的数据:
用明文:
checkCookiesEnabled true
checkMobileDevice false
checkStandaloneMode false
checkTabletDevice false
portalAccountUsername email
portalAccountPassword password
portalAccountUsernameLabel
Run Code Online (Sandbox Code Playgroud)
因此,用户名在一个名为portalAccountUsername和密码的字段中传递portalAccountPassword.其他字段可能重要也可能不重要.
现在您可以编写代码:
@IBAction func login(sender: AnyObject) {
let url = NSURL(string: "https://hac.chicousd.org/LoginParent.aspx")!
// The form parameters
let parameters = [
"checkCookiesEnabled": "true",
"checkMobileDevice": "false",
"checkStandaloneMode": "false",
"checkTabletDevice": "false",
"portalAccountUsername": "username",
"portalAccountPassword": "password"
]
let bodyString = parameters
.map { $0 + "=" + $1 }
.joinWithSeparator("&")
.stringByAddingPercentEncodingWithAllowedCharacters(.URLQueryAllowedCharacterSet())!
let request = NSMutableURLRequest(URL: url)
request.HTTPMethod = "POST"
request.HTTPBody = bodyString.dataUsingEncoding(NSUTF8StringEncoding)
let task = NSURLSession.sharedSession().dataTaskWithRequest(request) { data, response, error in
guard error == nil else {
print(error?.localizedDescription)
return
}
guard let data = data else {
print("empty data")
return
}
// This is the HTML source of the landing page after login
let html = String(data: data, encoding: NSUTF8StringEncoding)
}
task.resume()
}
Run Code Online (Sandbox Code Playgroud)
出于某些原因,在禁用App Transport Security之前,我无法发出请求.也许该网站上的资源来自非HTTPS域.
| 归档时间: |
|
| 查看次数: |
452 次 |
| 最近记录: |