如何在 Swift 3 的 POST 请求中发送表单数据
Posted
技术标签:
【中文标题】如何在 Swift 3 的 POST 请求中发送表单数据【英文标题】:How to send form data in POST request in Swift 3 【发布时间】:2017-09-15 11:14:22 【问题描述】:我正在尝试使用 web 服务、用户名和密码发布表单数据,但作为响应,它显示一个错误,指出“无法连接到服务器。”。
请帮我在 POST 请求中发送表单数据。
let dict:[String:String] = ["userName": userName as! String, "password": password as! String]
do
let jsonData = try JSONSerialization.data(withJSONObject: dict, options: .prettyPrinted)
let url = URL(string: "(some url)")!
var request = URLRequest(url: url)
request.httpMethod = "POST"
request.setValue("application/x-www-form-urlencoded charset=utf-8", forHTTPHeaderField: "Content-Type")
request.httpBody = jsonData
let task = URLSession.shared.dataTask(with: request) data, response, error in
if error != nil
print(error!.localizedDescription)
return
do
let json = try JSONSerialization.jsonObject(with: data!, options: .mutableContainers) as? NSDictionary
if let parseJSON = json
let resultValue:String = parseJSON["success"] as! String;
print("result: \(resultValue)")
print(parseJSON)
catch let error as NSError
print(error)
task.resume()
catch
print(error.localizedDescription)
我尝试在请求中添加值,可能是形成的请求中缺少某些值。请帮忙!
Thats the POSTMAN response
【问题讨论】:
还可以查看 AlamoFire pod,以更轻松地完成此操作。 @TheValyreanGroup 使用过 Alamofire,同样的问题也发生在那里。 API 在 POSTMAN 中运行良好 @TheValyreanGroup: 我的代码: let urlString = "xxx.xxxx.xxxx.xxx/login" let headers = [ "Content-Type": "application/form-data" ] Alamofire.request(urlString, method: .post , 参数: ["userName": userName,"password": password], 编码: JSONEncoding.default, headers: headers).responseJSON response in switch response.result case .success: print(response) break case .failure(让错误):打印(错误) @TheValyreanGroup 工作。我的请求如下: Alamofire.request(urlString, method: .post, parameters: param).responseJSON response in ,其中 param 是字典 & urlString 是 url。让参数:[字符串:字符串] = [“用户名”:“xxxx”,“密码”:“xxxx”] @TheValyreanGroup 你得到这个答案了吗? 【参考方案1】:我的调用 api 类
class ApiService
static func getPostString(params:[String:Any]) -> String
var data = [String]()
for(key, value) in params
data.append(key + "=\(value)")
return data.map String($0) .joined(separator: "&")
static func callPost(url:URL, params:[String:Any], finish: @escaping ((message:String, data:Data?)) -> Void)
var request = URLRequest(url: url)
request.httpMethod = "POST"
let postString = self.getPostString(params: params)
request.httpBody = postString.data(using: .utf8)
var result:(message:String, data:Data?) = (message: "Fail", data: nil)
let task = URLSession.shared.dataTask(with: request) data, response, error in
if(error != nil)
result.message = "Fail Error not null : \(error.debugDescription)"
else
result.message = "Success"
result.data = data
finish(result)
task.resume()
以及何时使用
ApiService.callPost(url: url, params: params, finish: finishPost)
和结束函数
func finishPost (message:String, data:Data?) -> Void
do
if let jsonData = data
let parsedData = try JSONDecoder().decode(Response.self, from: jsonData)
print(parsedData)
catch
print("Parse Error: \(error)")
【讨论】:
经过两天的努力终于以上是关于如何在 Swift 3 的 POST 请求中发送表单数据的主要内容,如果未能解决你的问题,请参考以下文章
使用 POST 请求 iOS Swift 3 发送嵌套 JSON
使用 Alamofire 3.0+ 在 swift 2.2 中使用 JSON 对象发送 POST 请求