【问题标题】:How to addValue forHTTPHeaderField from NSURLSessionResumeCurrentRequest of resumeData?如何从resumeData的NSURLSessionResumeCurrentRequest中为HTTPHeaderField添加值?
【发布时间】:2014-11-12 00:12:34
【问题描述】:
我有一个来自 cancelByProducingResumeData 的 resumeData 的字典:如下所示,我想知道如何使用 NSURLSessionResumeCurrentRequest 为 HTTPHeaderField 添加Value。
我想知道如何将 NSURLSessionResumeCurrentRequest 的 NSData 转换为 NSURLRequest。
2014-11-11 13:11:30.545 xxxxXXXXXX[77997:14163248] resumeInfo => {
NSURLSessionDownloadURL = "http://xxx.xxx.xxx/webdav/content/admin/201407/ttp.mp4";
NSURLSessionResumeBytesReceived = 50737920;
NSURLSessionResumeCurrentRequest = ;
NSURLSessionResumeEntityTag = 41220469dd0d761e33125751d386d9b1;
NSURLSessionResumeInfoLocalPath = "/Users/Library/Developer/CoreSimulator/Devices/0F13C2EC-4B9C-4FB4-AD78-7A309C4C65F2/data/Containers/Data/Application/28925A91-9DDE-4041-A1F5-A35387E9115E/tmp/CFNetworkDownload_NKJuq1.tmp";
NSURLSessionResumeInfoVersion = 1;
NSURLSessionResumeOriginalRequest = ;
NSURLSessionResumeServerDownloadDate = "2014 年 7 月 25 日星期五 04:36:22 GMT";
【问题讨论】:
标签:
ios
nsurlrequest
nsurlsession
nsurlsessiondownloadtask
header-fields
【解决方案1】:
我尝试使用以下代码更改我的请求,非常成功! ;)
- (NSData *)regenerateResumeData:(NSData *)originData
{
NSString *error;
NSPropertyListFormat format;
NSMutableDictionary* plist = [NSMutableDictionary dictionaryWithDictionary:[NSPropertyListSerialization propertyListFromData:originData mutabilityOption:NSPropertyListImmutable format:&format errorDescription:&error]];
NSData *currentRequest = [plist objectForKey:@"NSURLSessionResumeCurrentRequest"];
NSURLRequest *request = [(NSURLRequest *)[NSKeyedUnarchiver unarchiveObjectWithData:currentRequest] copy];
NSMutableURLRequest *mutableRequest = [request mutableCopy];
[mutableRequest addValue:[plist objectForKey:@"NSURLSessionResumeEntityTag"] forHTTPHeaderField:@"If-Match"];
[mutableRequest addValue:[NSString stringWithFormat:@"bytes=%@-", [plist objectForKey:@"NSURLSessionResumeBytesReceived"]] forHTTPHeaderField:@"Range"];
request = [mutableRequest copy];
NSData *archivedData = [NSKeyedArchiver archivedDataWithRootObject:request];
[plist removeObjectForKey:@"NSURLSessionResumeCurrentRequest"];
[plist setValue:archivedData forKey:@"NSURLSessionResumeCurrentRequest"];
return [NSPropertyListSerialization dataFromPropertyList:plist format:NSPropertyListBinaryFormat_v1_0 errorDescription:&error];
}