我从HTTP代理客户端和NSURLRequest
+ NSURLConnection
发送相同的HTTP消息,然后返回不同的结果。这是一个身份验证请求。从HTTP代理身份验证请求被接受,从app发送不。为什么?接受意味着重定向后HTML将不包含Oops
子字符串。
let url = NSURL(string: "http://www.swisshttp.weact.ch/en/user/login")
let request = NSMutableURLRequest(URL: url)
request.HTTPMethod = "POST"
request.setValue("application/x-www-form-urlencoded", forHTTPHeaderField: "Content-Type")
let email2 = (viewController!.email.text as NSString).stringByReplacingOccurrencesOfString("@", withString: "%40")
let str = "name=\(email2)&pass=\(viewController!.password.text)&form_id=user_login" as NSString
let d = str.dataUsingEncoding(NSUTF8StringEncoding)
if let d2 = d {
request.HTTPBody = d2
let urlConnection = NSURLConnection(request: request, delegate: self)
}
我已将@ teamnorge的代码放入操场并进入空的单视图应用程序项目。项目中返回的HTML包含Oops
子字符串,在游乐场中使用的代码不包含它,任何想法是什么,为什么同一个请求产生不同的HTML结果?我也从iOS设备和模拟器收到failed
消息。
删除了NSURLRequest
缓存,例如推荐的here,但仍未按预期工作。并here。
尝试删除here等所有凭据,但没有帮助,找不到凭据。
答案 0 :(得分:2)
看起来当您收到HTTP 302和新的位置URL时,iOS会自动通过此URL获取页面,因此我猜您的响应实际上是重定向页面的HTML内容。请验证。
<强>更新强>
import UIKit
import XCPlayground
let url = NSURL(string: "http://www.swisshttp.weact.ch/en/user/login")
let request = NSMutableURLRequest(URL: url!)
let str = "name=kukodajanos%40icloud.com&pass=jelszo&form_id=user_login" as NSString
let d = str.dataUsingEncoding(NSUTF8StringEncoding)
request.HTTPBody = d
request.HTTPMethod = "POST"
request.setValue("application/x-www-form-urlencoded", forHTTPHeaderField: "Content-Type")
NSURLConnection.sendAsynchronousRequest(request, queue: NSOperationQueue.currentQueue()) { response, maybeData, error in
if let data = maybeData {
let contents = NSString(data:data, encoding:NSUTF8StringEncoding)
println(contents)
if contents!.rangeOfString("Oops").length == 0 {
println("success")
} else {
println("failed")
}
} else {
println(error.localizedDescription)
}
}
XCPSetExecutionShouldContinueIndefinitely()