ios 如何在 Swift 中发送 POST 参数?
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/24714566/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
How to send POST parameters in Swift?
提问by Maxim Tsybanov
Here some code:
这里有一些代码:
var URL: NSURL = NSURL(string: "http://stackoverflow.com")
var request:NSMutableURLRequest = NSMutableURLRequest(URL:URL)
request.HTTPMethod = "POST"
request.HTTPBody = ??????
NSURLConnection.sendAsynchronousRequest(request, queue: NSOperationQueue.mainQueue())
{
(response, data, error) in
println(NSString(data: data, encoding: NSUTF8StringEncoding))
}
What should I write in request.HTTPBody
if I want send POST query "key" = "value"
?
request.HTTPBody
如果我想发送 POST 查询,我应该写什么"key" = "value"
?
回答by pixel
No different than in Objective-C, HTTPBody expects an NSData object:
与 Objective-C 没有什么不同,HTTPBody 需要一个 NSData 对象:
var bodyData = "key1=value&key2=value&key3=value"
request.HTTPBody = bodyData.dataUsingEncoding(NSUTF8StringEncoding);
You'll have to setup the values & keys yourself in the string.
您必须自己在字符串中设置值和键。
回答by Ishwar Hingu
class func postMethod (params: [String : AnyObject], apikey: String, completion: @escaping (Any) -> Void, failure:@escaping (Error) -> Void)
{
if Utils().isConnectedToNetwork() == false
{
DispatchQueue.main.asyncAfter(deadline: .now() + 0.1, execute: {
Utils().HideLoader()
})
return
}
let strURL = Constants.BASE_URL + apikey
let url = URL(string: strURL)
print(params)
print(strURL)
var token = String()
if((Constants.USERDEFAULTS .value(forKey: "token")) != nil){
token = Constants.USERDEFAULTS.value(forKey: "token") as! String
}
else{
token = ""
}
let headers = [
"Authorization": "Bearer \(token)",
"Accept": "application/json"
]
let manager = Alamofire.SessionManager.default
manager.session.configuration.timeoutIntervalForRequest = 120
manager.request(url!, method: .post, parameters: params, headers: headers)
.responseJSON
{
response in
switch (response.result)
{
case .success:
let jsonResponse = response.result.value as! NSDictionary
print(jsonResponse)
completion(jsonResponse)
Utils().HideLoader()
case .failure(let error):
Utils().showAlert("Something went wrong")
Utils().HideLoader()
failure(error)
break
}
}
}
回答by Ibrahim
Update to Swift 4.2
更新到 Swift 4.2
This code is based on pixel'sanswer, and is meant as an update for Swift 4.2
此代码基于像素的答案,旨在作为更新Swift 4.2
let bodyData = "key1=value&key2=value&key3=value"
request.httpBody = bodyData.data(using: .utf8)
回答by Mohit Tomar
var post:NSString = "api=myposts&userid=\(uid)&page_no=0&limit_no=10"
NSLog("PostData: %@",post);
var url1:NSURL = NSURL(string: url)!
var postData:NSData = post.dataUsingEncoding(NSASCIIStringEncoding)!
var postLength:NSString = String( postData.length )
var request:NSMutableURLRequest = NSMutableURLRequest(URL: url1)
request.HTTPMethod = "POST"
request.HTTPBody = postData
request.setValue(postLength, forHTTPHeaderField: "Content-Length")
request.setValue("application/x-www-form-urlencoded", forHTTPHeaderField: "Content-Type")
request.setValue("application/json", forHTTPHeaderField: "Accept")
var reponseError: NSError?
var response: NSURLResponse?
var urlData: NSData? = NSURLConnection.sendSynchronousRequest(request, returningResponse:&response, error:&reponseError)
if ( urlData != nil ) {
let res = response as NSHTTPURLResponse!;
NSLog("Response code: %ld", res.statusCode);
if (res.statusCode >= 200 && res.statusCode < 300)
{
var responseData:NSString = NSString(data:urlData!, encoding:NSUTF8StringEncoding)!
NSLog("Response ==> %@", responseData);
var error: NSError?
let jsonData:NSDictionary = NSJSONSerialization.JSONObjectWithData(urlData!, options:NSJSONReadingOptions.MutableContainers , error: &error) as NSDictionary
let success:NSInteger = jsonData.valueForKey("error") as NSInteger
//[jsonData[@"success"] integerValue];
NSLog("Success: %ld", success);
if(success == 0)
{
NSLog("Login SUCCESS");
self.dataArr = jsonData.valueForKey("data") as NSMutableArray
self.table.reloadData()
} else {
NSLog("Login failed1");
}
} else {
NSLog("Login failed2");
}
} else {
NSLog("Login failed3");
}
This will help you definitely
这绝对会帮助你