ios - 如何在 Swift 中发出 HTTP 请求 + 基本身份验证

标签 ios swift

我有一个带有基本身份验证的 RESTFull 服务,我想从 iOS+swift 调用它。我必须如何以及在何处为此请求提供凭据?

我的代码(抱歉,我刚刚开始学习iOS/obj-c/swift):

class APIProxy: NSObject {
    var data: NSMutableData = NSMutableData()
    
    func connectToWebApi() {
        var urlPath = "http://xx.xx.xx.xx/BP3_0_32/ru/hs/testservis/somemethod"
        NSLog("connection string \(urlPath)")
        var url: NSURL = NSURL(string: urlPath)
        var request = NSMutableURLRequest(URL: url)
        let username = "hs"
        let password = "1"
        let loginString = NSString(format: "%@:%@", username, password)
        let loginData: NSData = loginString.dataUsingEncoding(NSUTF8StringEncoding)
        let base64LoginString = loginData.base64EncodedStringWithOptions(NSDataBase64EncodingOptions.fromMask(0))
        request.setValue(base64LoginString, forHTTPHeaderField: "Authorization")
        
        var connection: NSURLConnection = NSURLConnection(request: request, delegate: self)
        
        connection.start()
    }
    
    
    //NSURLConnection delegate method
    func connection(connection: NSURLConnection!, didFailWithError error: NSError!) {
        println("Failed with error:\(error.localizedDescription)")
    }
    
    //NSURLConnection delegate method
    func connection(didReceiveResponse: NSURLConnection!, didReceiveResponse response: NSURLResponse!) {
        //New request so we need to clear the data object
        self.data = NSMutableData()
    }
    
    //NSURLConnection delegate method
    func connection(connection: NSURLConnection!, didReceiveData data: NSData!) {
        //Append incoming data
        self.data.appendData(data)
    }
    
    //NSURLConnection delegate method
    func connectionDidFinishLoading(connection: NSURLConnection!) {
        NSLog("connectionDidFinishLoading");
    }
    
}

最佳答案

您在 URLRequest 实例中提供凭据,就像 Swift 3 中的这样:

let username = "user"
let password = "pass"
let loginString = String(format: "%@:%@", username, password)
let loginData = loginString.data(using: String.Encoding.utf8)!
let base64LoginString = loginData.base64EncodedString()

// create the request
let url = URL(string: "http://www.example.com/")!
var request = URLRequest(url: url)
request.httpMethod = "POST"
request.setValue("Basic \(base64LoginString)", forHTTPHeaderField: "Authorization")

// fire off the request
// make sure your class conforms to NSURLConnectionDelegate
let urlConnection = NSURLConnection(request: request, delegate: self)

或者在 Swift 2 中的 NSMutableURLRequest 中:

// set up the base64-encoded credentials
let username = "user"
let password = "pass"
let loginString = NSString(format: "%@:%@", username, password)
let loginData: NSData = loginString.dataUsingEncoding(NSUTF8StringEncoding)!
let base64LoginString = loginData.base64EncodedStringWithOptions([])

// create the request
let url = NSURL(string: "http://www.example.com/")
let request = NSMutableURLRequest(URL: url)
request.HTTPMethod = "POST"
request.setValue("Basic \(base64LoginString)", forHTTPHeaderField: "Authorization")

// fire off the request
// make sure your class conforms to NSURLConnectionDelegate
let urlConnection = NSURLConnection(request: request, delegate: self)

关于ios - 如何在 Swift 中发出 HTTP 请求 + 基本身份验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46659345/

相关文章:

ios - 如何知道选择了哪个部分? swift

ios - 当 tableview 使用自动布局滚动时避免粘性标题 View

SwiftUI - 按下按钮和导航时带有错误消息的表单

ios - iOS 上的 PhoneGap 是否硬编码以加载 www/index.html?

ios - 我将如何为 SKPaymentQueue 使用未弃用的 API?

ios - 在 Mapbox 的导航 View 上添加自定义按钮

arrays - 在单独的 ViewController 中编辑 tableView 条目,并将编辑后的数据传回 tableView

swift - 努力理解 Swift 3 用非可失败初始化器覆盖可失败初始化器

javascript - react native 。应用程序的关闭事件

ios - 检查保存到相机胶卷是否成功