当前位置: 首页 > 知识库问答 >
问题:

使用POST方法在Swift中进行HTTP请求

须景辉
2023-03-14

我正在尝试在Swift中运行一个HTTP请求,将2个参数发布到一个URL。

示例:

链接:

参数:

id = 13
name = Jack

null

我甚至都不想看回复。我只是想通过一个PHP文件发送它来执行对我的数据库的更改。

共有3个答案

林德华
2023-03-14

对于任何想用Swift5编码POST请求的人来说。

null

let url = URL(string: "https://example.com")!
var components = URLComponents(url: url, resolvingAgainstBaseURL: false)!

components.queryItems = [
    URLQueryItem(name: "key1", value: "NeedToEscape=And&"),
    URLQueryItem(name: "key2", value: "vålüé")
]

let query = components.url!.query

null

null

null

var request = URLRequest(url: url)
request.httpMethod = "POST"
request.httpBody = Data(query.utf8)

现在您可以发送请求了。

徐秋月
2023-03-14

Swift 4及以上

@IBAction func submitAction(sender: UIButton) {

    //declare parameter as a dictionary which contains string as key and value combination. considering inputs are valid

    let parameters = ["id": 13, "name": "jack"]

    //create the url with URL
    let url = URL(string: "www.thisismylink.com/postName.php")! //change the url

    //create the session object
    let session = URLSession.shared

    //now create the URLRequest object using the url object
    var request = URLRequest(url: url)
    request.httpMethod = "POST" //set http method as POST

    do {
        request.httpBody = try JSONSerialization.data(withJSONObject: parameters, options: .prettyPrinted) // pass dictionary to nsdata object and set it as request body
    } catch let error {
        print(error.localizedDescription)
    }

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

    //create dataTask using the session object to send data to the server
    let task = session.dataTask(with: request as URLRequest, completionHandler: { data, response, error in

        guard error == nil else {
            return
        }

        guard let data = data else {
            return
        }

        do {
            //create json object from data
            if let json = try JSONSerialization.jsonObject(with: data, options: .mutableContainers) as? [String: Any] {
                print(json)
                // handle json...
            }
        } catch let error {
            print(error.localizedDescription)
        }
    })
    task.resume()
}
万俟高峻
2023-03-14

null

let url = URL(string: "http://www.thisismylink.com/postName.php")!
var request = URLRequest(url: url)
request.setValue("application/x-www-form-urlencoded", forHTTPHeaderField: "Content-Type")
request.httpMethod = "POST"
let parameters: [String: Any] = [
    "id": 13,
    "name": "Jack & Jill"
]
request.httpBody = parameters.percentEncoded()

let task = URLSession.shared.dataTask(with: request) { data, response, error in
    guard let data = data, 
        let response = response as? HTTPURLResponse, 
        error == nil else {                                              // check for fundamental networking error
        print("error", error ?? "Unknown error")
        return
    }

    guard (200 ... 299) ~= response.statusCode else {                    // check for http errors
        print("statusCode should be 2xx, but is \(response.statusCode)")
        print("response = \(response)")
        return
    }

    let responseString = String(data: data, encoding: .utf8)
    print("responseString = \(responseString)")
}

task.resume()

其中:

extension Dictionary {
    func percentEncoded() -> Data? {
        return map { key, value in
            let escapedKey = "\(key)".addingPercentEncoding(withAllowedCharacters: .urlQueryValueAllowed) ?? ""
            let escapedValue = "\(value)".addingPercentEncoding(withAllowedCharacters: .urlQueryValueAllowed) ?? ""
            return escapedKey + "=" + escapedValue
        }
        .joined(separator: "&")
        .data(using: .utf8)
    }
}

extension CharacterSet { 
    static let urlQueryValueAllowed: CharacterSet = {
        let generalDelimitersToEncode = ":#[]@" // does not include "?" or "/" due to RFC 3986 - Section 3.4
        let subDelimitersToEncode = "!$&'()*+,;="

        var allowed = CharacterSet.urlQueryAllowed
        allowed.remove(charactersIn: "\(generalDelimitersToEncode)\(subDelimitersToEncode)")
        return allowed
    }()
}

这将检查基本网络错误和高级HTTP错误。这也正确地%转义了查询的参数。

注意,我使用了 ;jill/code>,以说明 正确的 结果,它是百分比编码的(即空格替换为 ,值中的 替换为

null

 类似资料:
  • 问题内容: 我正在尝试在Swift中运行HTTP请求,以将2个参数发布到URL。 例: 链接: 参数: 最简单的方法是什么? 我什至不想阅读回复。我只想发送该文件,以通过PHP文件对数据库进行更改。 问题答案: 在Swift 3及更高版本中,您可以: 哪里: 这将检查基本的网络错误以及高级HTTP错误。这也可以正确地对查询的参数进行转义。 请注意,我使用的of 来说明的正确结果,该结果是“百分比编

  • 最简单的方法是什么? 我甚至不想看回应。我只想通过PHP文件发送它来执行对数据库的更改。

  • 问题内容: 我想在Java中使用JSON进行简单的HTTP POST。 假设网址是 并采用标记为例如的值。 我将如何为POST创建语法? 我似乎也无法在JSON Javadocs中找到POST方法。 问题答案: 这是你需要做的: 获取Apache HttpClient,这将使你能够发出所需的请求 使用它创建一个HttpPost请求,并添加标题“ application / x-www-form-u

  • 我试图使用JSON主体发出HTTP post请求:

  • 本文向大家介绍如何使用Swift在iOS App上发出HTTP POST请求?,包括了如何使用Swift在iOS App上发出HTTP POST请求?的使用技巧和注意事项,需要的朋友参考一下 要在iOS中发出http请求,我们将使用DataTask和会话。我们将创建配置,会话,URL,请求和dataTask对象。让我们看看我们将要执行的步骤。 首先我们需要创建一个会话对象,这是默认配置。 然后,我

  • 主要内容:Maven依赖关系,HTTP GET请求方法示例本教程演示如何使用Apache HttpClient 4.5发出Http POST请求。 HTTP POST请求方法请求服务器接受请求中包含的实体作为URI标识的Web资源。 发布的数据可以是但不限于现有资源的注释或数据格式化的JSON,XML或提交的表单数据。 服务器可以使用发布的数据来更新数据库中的资源,或处理这些数据。 Maven依赖关系 我们使用maven来管理依赖关系,并使用Apache