gpt4 book ai didi

ios - 如何在 Swift 中执行 GET 和 POST 请求?

转载 作者:可可西里 更新时间:2023-11-01 00:16:22 25 4
gpt4 key购买 nike

我改编自 Ray Wenderlich 的 iOS Apprentice 教程第 4 部分。

此代码作为 GET 请求使用简单的数据库模型发送到我的 Strongloop API,但是:

  1. 这行得通,但我不知道它为什么行得通,因为它没有调用任何我能看到的实际发送请求的方法。

  2. 我认为没有办法将其变成 POST 请求。

我的问题是:如何执行 POST 请求?它是以完全不同的方式完成的吗?

如果您需要更多信息,请告诉我。

    class ViewController: UIViewController {


override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
}

override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}

@IBAction func getFromDB() {
let url = urlWithSearchText("")
println("URL: '\(url)'")
if let jsonString = performGetRequestWithURL(url) {
println("Received JSON string '\(jsonString)'")
}
}


func urlWithSearchText(searchText: String) -> NSURL {
let escapedSearchText = searchText.stringByAddingPercentEscapesUsingEncoding(NSUTF8StringEncoding)!
let urlString = String(format: "http://localhost:3000/api/Tests", escapedSearchText)
let url = NSURL(string: urlString)
return url!
}

func performGetRequestWithURL(url: NSURL) -> String? {
var error: NSError?
if let resultString = String(contentsOfURL: url, encoding: NSUTF8StringEncoding, error: &error) {
return resultString
} else if let error = error {
println("Download Error: \(error)")
} else {
println("Unknown Download Error")
}
return nil
}

这是工作的图片:

https://dl.dropboxusercontent.com/u/14464971/Images/Messages%20Image%281477993527%29.png

最佳答案

Swift 3 及更高版本

获取

 func getRequest() {

// request url
let url = URL(string: "https://jsonplaceholder.typicode.com/todos/1")! // change the url

// create URLSession with default configuration
let session = URLSession.shared

// create dataTask using the session object to send data to the server
let task = session.dataTask(with: url) { data, response, error in

if let error = error {
print("GET Request Error: \(error.localizedDescription)")
return
}

// ensure there is valid response code returned from this HTTP response
guard let httpResponse = response as? HTTPURLResponse,
(200...299).contains(httpResponse.statusCode) else {
print("Invalid Response received from the server")
return
}

// ensure there is data returned
guard let responseData = data else {
print("nil Data received from the server")
return
}

do {
// serialise the data object into Dictionary [String : Any]
if let jsonResponse = try JSONSerialization.jsonObject(with: responseData, options: .mutableContainers) as? [String: Any] {
print(jsonResponse)
} else {
print("data maybe corrupted or in wrong format")
throw URLError(.badServerResponse)
}
} catch let error {
print("JSON Parsing Error: \(error.localizedDescription)")
}
}
// resume the task
task.resume()
}

发布

func postRequest() {

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

let parameters: [String: Any] = ["name": "abc", "password": "password@123"]

// create the url with URL
let url = URL(string: "http://myServerName.com/api")! //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

// add headers for the request
request.addValue("application/json", forHTTPHeaderField: "Content-Type") // change as per server requirements
request.addValue("application/json", forHTTPHeaderField: "Accept")

do {
// convert parameters to Data and assign dictionary to httpBody of request
request.httpBody = try JSONSerialization.data(withJSONObject: parameters, options: .prettyPrinted)
} catch let error {
print(error.localizedDescription)
return
}

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

if let error = error {
print("Post Request Error: \(error.localizedDescription)")
return
}

// ensure there is valid response code returned from this HTTP response
guard let httpResponse = response as? HTTPURLResponse,
(200...299).contains(httpResponse.statusCode)
else {
print("Invalid Response received from the server")
return
}

// ensure there is data returned
guard let responseData = data else {
print("nil Data received from the server")
return
}

do {
// create json object from data or use JSONDecoder to convert to Model stuct
if let jsonResponse = try JSONSerialization.jsonObject(with: responseData, options: .mutableContainers) as? [String: Any] {
print(jsonResponse)
// handle json response
} else {
print("data maybe corrupted or in wrong format")
throw URLError(.badServerResponse)
}
} catch let error {
print(error.localizedDescription)
}
}
task.resume()
}

关于ios - 如何在 Swift 中执行 GET 和 POST 请求?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31077989/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com