Ios 如何在Swift中发送POST参数?
下面是一些代码:Ios 如何在Swift中发送POST参数?,ios,swift,Ios,Swift,下面是一些代码: var URL: NSURL = NSURL(string: "http://stackoverflow.com") var request:NSMutableURLRequest = NSMutableURLRequest(URL:URL) request.HTTPMethod = "POST" request.HTTPBody = ?????? NSURLConnection.sendAsynchronousRequest(request, queue: NSOperat
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))
}
如果我想发送POST查询
“key”=“value”
,我应该在request.HTTPBody
中写什么?与Objective-C中相同,HTTPBody需要一个NSData对象:
var bodyData = "key1=value&key2=value&key3=value"
request.HTTPBody = bodyData.dataUsingEncoding(NSUTF8StringEncoding);
您必须自己在字符串中设置值和键。var post:NSString=“api=myposts&userid=\(uid)&page\u no=0&limit\u no=10”
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");
}
NSLog(“PostData:%@”,post);
var url1:NSURL=NSURL(字符串:url)!
var postData:NSData=post.dataUsingEncoding(NSASCIIStringEncoding)!
变量postLength:NSString=String(postData.length)
var请求:NSMutableURLRequest=NSMutableURLRequest(URL:url1)
request.HTTPMethod=“POST”
request.HTTPBody=postData
request.setValue(postLength,forHTTPHeaderField:“内容长度”)
request.setValue(“application/x-www-form-urlencoded”,forHTTPHeaderField:“内容类型”)
request.setValue(“application/json”,forHTTPHeaderField:“Accept”)
var REPORNSERROR:NSError?
var响应:nsurresponse?
变量urlData:NSData?=NSURLConnection.sendSynchronousRequest(请求、返回响应:&response、错误:&ResponseError)
if(urlData!=nil){
让res=响应为NSHTTPURLResponse!;
NSLog(“响应代码:%ld”,res.statusCode);
如果(res.statusCode>=200&&res.statusCode<300)
{
var responseData:NSString=NSString(数据:urlData!,编码:NSUTF8StringEncoding)!
NSLog(“响应==>%@”,响应数据);
var错误:N错误?
让jsonData:NSDictionary=NSJSONSerialization.JSONObjectWithData(urlData!,选项:NSJSONReadingOptions.MutableContainers,错误:&error)作为NSDictionary
让success:NSInteger=jsonData.valueForKey(“错误”)作为NSInteger
//[jsonData[@“success”]integerValue];
NSLog(“成功:%ld”,成功);
如果(成功==0)
{
NSLog(“登录成功”);
self.dataArr=jsonData.valueForKey(“数据”)作为NSMutableArray
self.table.reloadData()
}否则{
NSLog(“登录失败1”);
}
}否则{
NSLog(“登录失败2”);
}
}否则{
NSLog(“登录失败3”);
}
这对你肯定有帮助
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
}
}
}
更新至Swift 4.2
此代码基于pixel的答案,是对Swift 4.2
let bodyData = "key1=value&key2=value&key3=value"
request.httpBody = bodyData.data(using: .utf8)
那怎么办?我见过这个。但我没有看到key=value的例子。只是“一些数据”。对于php,它看起来像:$\u POST['key']=“value”;只要你在SWIFT(iOS 7 +)中编写,你也可以考虑使用NSURLISTION(也就是iOS 7 +),而不是NSLLCONNECTION。请你告诉我们为什么NSURLIST比NSURLCONNED更好吗?抱歉,有人能告诉我这行是什么意思(响应、数据、错误)(data:data,encoding:NSUTF8StringEncoding))我想我做错了什么:在服务器上我只有index.php:if($\u POST['test']==“some”)echo“起作用”;else echo“不起作用”。在我的第一篇文章的代码中,我添加了您编写的其他代码:var bodyData=“some=test”。我还有“不起作用”。swift代码有问题吗?在客户端中,您应该设置key=value,因此字符串应该是test=some而不是some=testIt听起来很奇怪,但问题出在URL地址中。我在文件夹/someFolder/中有index.php,URL是:“”。当我将其更改为“”时。它可以工作。但对于第一个URL,我也得到了不正确的答案。太奇怪了。我如何通过base64图像发送?它是一个长字符串,在发送到服务器时会将其切断,即使我使用post?这不会对数据进行属性编码(转义/引用特殊字符等)。只有在原始OP请求时,才应引用第三方软件包。添加“request.setValue(“application/x-www-form-urlencoded”,forHTTPHeaderField:“Content Type”)”使所有内容都对我有效。谢谢。应该让bodyData=“key1=value&key2=value&key3=value”