Ios NSURLSession post:uploadTask和dataTask之间的差异
以下是我的两个例子:Ios NSURLSession post:uploadTask和dataTask之间的差异,ios,http,post,background-process,nsurlsession,Ios,Http,Post,Background Process,Nsurlsession,以下是我的两个例子: let config = NSURLSessionConfiguration.defaultSessionConfiguration() config.HTTPAdditionalHeaders = ["Accept": "application/json", "Content-Type": "application/json",
let config = NSURLSessionConfiguration.defaultSessionConfiguration()
config.HTTPAdditionalHeaders = ["Accept": "application/json",
"Content-Type": "application/json",
"User-Agent": UIDevice.currentDevice().model]
var request = NSMutableURLRequest(URL: NSURL(string: "http://XXX"))
request.HTTPMethod = "POST"
let valuesToSend = ["key":value, "key2":value]
var error: NSError?
let data = NSJSONSerialization.dataWithJSONObject(valuesToSend, options:NSJSONWritingOptions.PrettyPrinted, error: &error)
request.HTTPBody = data
if error == nil {
let task = NSURLSession(configuration: config).dataTaskWithRequest(request,
completionHandler: {data, response, error in
if error == nil {
println("received == \(NSString(data: data, encoding: NSUTF8StringEncoding))")
}
})
task.resume()
} else {
println("Oups error \(error)")
}
第二个呢
let config = NSURLSessionConfiguration.defaultSessionConfiguration()
config.HTTPAdditionalHeaders = ["Accept": "application/json",
"Content-Type": "application/json",
"User-Agent": UIDevice.currentDevice().model]
var request = NSMutableURLRequest(URL: NSURL(string: "http://XXX"))
request.HTTPMethod = "POST"
let valuesToSend = ["key":value, "key2":value]
var error: NSError?
let data = NSJSONSerialization.dataWithJSONObject(valuesToSend, options:NSJSONWritingOptions.PrettyPrinted, error: &error)
if error == nil {
let task = NSURLSession(configuration: config).uploadTaskWithRequest(request, fromData: data,
completionHandler: {data, response, error in
if error == nil {
println("received == \(NSString(data: data, encoding: NSUTF8StringEncoding))")
}
})
task.resume()
} else {
println("Oups error \(error)")
}
所以我想知道:这两个例子之间有什么区别,对我来说更好的例子(简单的帖子和接收)又有什么区别
这两个人在后台没有?那么?来自:
dataTaskWithRequest:
基于指定的URL请求对象创建HTTP请求<代码>-
(NSURLSessionDataTask*)dataTaskWithRequest:(NSURLRRequest*)request
参数
请求
提供特定于请求的信息(如URL)的对象,
缓存策略、请求类型和正文数据或正文流
返回值
新会话数据任务
讨论
创建任务后,必须通过调用其resume来启动任务
方法
可用性
在iOS 7.0及更高版本中提供
在
NSURLSession.h
uploadTaskWithRequest:fromData:
为指定的URL请求对象创建HTTP请求,并
上载提供的数据对象<代码>-(NSURLSessionPloadTask
*)uploadTaskWithRequest:(NSURLRequest*)来自数据的请求:(NSData*)bodyData
参数
请求
提供URL、缓存策略和请求的NSURLRequest
对象
类型,等等。此请求对象中的正文流和正文数据
都被忽略了
车身数据
请求的正文数据
返回值
新会话上载任务
讨论
创建任务后,必须通过调用其resume
方法
可用性
在iOS 7.0及更高版本中提供
在
NSURLSession.h
此外,他还说:
NSURLSessionDataTask
此任务发出HTTP GET请求,以从服务器中提取数据。这个
数据以NSData
的形式返回。然后将转换此数据
到正确的类型XML
,JSON
,UIImage
,plist
,等等
NSURLSessionDataTask *jsonData = [session dataTaskWithURL:yourNSURL
completionHandler:^(NSData *data,
NSURLResponse *response,
NSError *error) {
// handle NSData
}];
NSURLSessionUploadTask
当您需要将某些内容上载到web服务时,请使用此类
使用httppost
或PUT
命令。任务的代表也可以
允许您在传输网络流量时监视网络流量
上载图像:
NSData *imageData = UIImageJPEGRepresentation(image, 0.6);
NSURLSessionUploadTask *uploadTask =
[upLoadSession uploadTaskWithRequest:request
fromData:imageData];
在这里,任务是从会话中创建的,图像上传为
NSData
。也有使用文件或流上传的方法
但是,您的问题仍然很模糊,范围太广,因为您没有解释一个明确、具体的问题,您可以通过搜索一点来轻松找到这些信息。您是否尝试过使用它们并在实际编译的代码中看到实际效果?是的。它是在一个实际的项目上检查用户身份验证。我没有看到任何不同。这里是HTTP新手。。。如果我发出一个
dataTaskWithRequest()
,传递一个配置为POST
的请求,会发生什么情况?我第一次通过https向服务器发送凭据,以获取令牌。我将凭证(JSON)附加到请求主体,并为整个NSURLSession
设置Authroization头。上载任务答案中的示例代码使用图像负载。我不知道这是否适用于我的情况,但我仍然想使用POST
@NicolasMiari:“数据任务使用NSData对象发送和接收数据。数据任务用于从应用程序到服务器的简短且通常是交互式的请求。数据任务可以在接收到每一条数据后,一次将一条数据返回到应用程序,也可以通过完成处理程序一次将所有数据返回到应用程序。“看吧,是的,你可以用它。我认为这个问题一点也不含糊。问题在于发布的确切代码,以及在URLRequest中使用dataTask传递JSON正文数据与在uploadTask中传递JSON正文数据是否有区别。苹果文档中没有明确的答案,如果在这方面存在差异或建议。