我正在尝试使用基本身份验证进行Rest API调用。我能够成功拨打电话,但问题是,如果我在通话中提供了错误的用户名和密码,那么我的响应也会成功。
我尝试将登录名和密码字段设置为空白,但仍然收到成功响应。我相信这是一个缓存问题。我正在尝试的代码如下
@IBAction func sampleButtonAction()
{
let headers = [
"cache-control": "no-cache"
]
let login = "XXXXX"
let password = "XXXXX"
let request = NSMutableURLRequest(url: NSURL(string: "https://Sample.com")! as URL,
cachePolicy: .reloadIgnoringLocalCacheData,
timeoutInterval: 10.0)
request.httpMethod = "GET"
request.allHTTPHeaderFields = headers
let config = URLSessionConfiguration.default
let loginData = String(format: "%@:%@", login, password).data(using: String.Encoding.utf8)!
let base64EncodedCredential = loginData.base64EncodedString()
let authString = "Basic (base64EncodedCredential)"
config.httpAdditionalHeaders = ["Authorization" : authString]
let session = URLSession.shared
let dataTask = session.dataTask(with: request as URLRequest, completionHandler: { (data, response, error) -> Void in
if (error != nil) {
print(error!)
} else {
let httpResponse = response as? HTTPURLResponse
print(httpResponse!)
let responseData = String(data: data!, encoding: String.Encoding.utf8)
print(responseData!)
}
})
dataTask.resume()
}
有人可以指出我做错了什么吗?提前谢谢。
我假设你的意思是error
仍然在回调中nil
,即使 HTTP 状态代码在 2xx 之外。
这是预期的行为。错误变量仅在实际网络请求失败时(例如没有互联网连接时)不nil
。当请求成功时,无论响应 HTTP 代码如何,它都将为零。
因此,您需要做的是扩展逻辑以包括对响应状态代码的检查:
if (200 ... 299).contains(httpResponse.statusCode!)