swift - 如何在下面的代码中添加标题和参数

标签 swift http-headers nsurlsession

我有一段代码可以从 URL 中获取内容,但是我该如何在下面为这段代码添加 header 和参数。

let url = NSURL(string: catURL)
let config = URLSessionConfiguration.default
let session = URLSession(configuration: config)
let task = session.dataTask(with: url as! URL) {
        ( data, response, error) in
        if let taskHeader = response as? HTTPURLResponse {
          print(taskHeader.statusCode)
        }
        if error != nil {
            print("There is an error!!!")
            print(error)
        } else {
            if let content = data {
                do {
                    let array = try JSONSerialization.jsonObject(with: content, options: JSONSerialization.ReadingOptions.mutableContainers) as AnyObject
                     let dictionary = try JSONSerialization.jsonObject(with: content) as! [String:Any]
                    if let items = dictionary["course"] as? [[String:Any]] {
                        for item in items {
                           if let ids = item["name"] {                                    
                               print("iDS = \(ids)")
                            }

最佳答案

您应该创建带有 header 的 URLRequest 并在此请求中使用 dataTask:

您可以像这样设置参数:

url.queryItems = [
    URLQueryItem(name: "parameterName", value: "parameterValue")
]

可以设置httpMethod

let request = URLRequest(url: url)
request.httpMethod = "POST" // "POST", "GET", "PUT", "DELETE"

添加标题

request.setValue("application/json", forHTTPHeaderField: "Content-Type")

您可以设置jsonData并在请求中使用此数据

let json = [
    "key1": "value1",
    "key2": "value2"
]

字典到 JSON:

let jsonData = try! JSONSerialization.data(withJSONObject: json, options: [])

用法

let task = session.uploadTask(with: request, from: jsonData) { data, response, error in
    // Do something...
}
task.resume()

奖金

/// Print response data
if let data = data, let dataString = String(data: data, encoding: .utf8) {
    print(dataString)
}

/// Print status code
if let httpResponse = response as? HTTPURLResponse {
    print(httpResponse.statusCode)
}

示例

let url = URLComponents(string: catURL)
let config = URLSessionConfiguration.default
let session = URLSession(configuration: config)

url.queryItems = [
    URLQueryItem(name: "parameterName", value: "parameterValue")
]

let request = URLRequest(url: url)
request.allHTTPHeaderFields = ["application/json": "Content-Type"]

let task = session.dataTask(with: request) { ( data, response, error) in
    if let taskHeader = response as? HTTPURLResponse {
        print(taskHeader.statusCode)
    }

    if error != nil {
        print("There is an error!!!")
        print(error)
    } else {
        if let content = data {
            do {
                let array = try JSONSerialization.jsonObject(with: content, options: JSONSerialization.ReadingOptions.mutableContainers) as AnyObject
                 let dictionary = try JSONSerialization.jsonObject(with: content) as! [String:Any]
                if let items = dictionary["course"] as? [[String:Any]] {
                    for item in items {
                       if let ids = item["name"] {                                    
                           print("iDS = \(ids)")
                        }

关于swift - 如何在下面的代码中添加标题和参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56986987/

相关文章:

ios - 裁剪图像的问题

ios - 无法将类型 '(Either<NestedType>) -> Void' 的值转换为预期的参数类型 '(Either<[_]>) -> Void'

javascript - 我可以使用 chrome 来更新 json 响应数据吗?

c# - 使用 HttpListener 处理范围请求

codeigniter - NSURLSession iOS CodeIgniter 不发送 POST

ios - NSURLSession 跟踪多个获取请求?

ios - 将 iOS 9 今天的扩展程序转换为 iOS 10 的大小问题

arrays - 根据数据结构将数据追加到矩阵

php - 检查内容是否已经在 PHP 中发送

objective-c - 如何通过 NSURLSession 使用特定网络连接 (OS X)