- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试阅读 NSHTTPURLResponse
状态代码,但是 NSHTTPURLResponse
返回零,但没有 NSError
已创建。
这在 iOS 11 之前有效,但我没有收到关于它已被弃用的警告,而且我无法在网上找到任何引用 NSURLSession
的内容有这个问题。
知道为什么吗?
我通常调用以下方法 [MyClass getHTTPResponseRequest:@"http://www.google.com/"];
+ (NSInteger) getHTTPResponseRequest : (NSString*) testURL {
__block NSHTTPURLResponse * r = nil;
[[[NSURLSession sharedSession] dataTaskWithURL:[NSURL URLWithString:testURL]
completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
if (error) {
NSLog(@"Error %@", error.localizedDescription);
}
r = (NSHTTPURLResponse *)response;
}] resume];
if(r == nil){
NSLog(@"Response is nil");
return 9999;
}
return r.statusCode;
}
最佳答案
这在 iOS 11 之前也行不通。 dataTaskWithURL
完成处理程序被异步调用,但您不会在尝试返回 statusCode
之前等待请求完成。
您应该采用异步模式,例如自己使用完成处理程序模式:
+ (void)getHTTPResponseRequestWithURL:(NSString *)urlString completion:(void(^ _Nonnull)(NSInteger))completion {
NSURL *url = [NSURL URLWithString:urlString];
[[[NSURLSession sharedSession] dataTaskWithURL:url completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
if (error) {
NSLog(@"Error %@", error.localizedDescription);
}
NSInteger statusCode;
if ([response isKindOfClass:[NSHTTPURLResponse class]]) {
statusCode = [(NSHTTPURLResponse *)response statusCode];
} else {
statusCode = 9999;
}
completion(statusCode);
}] resume];
}
你会这样调用它:
[MyClass getHTTPResponseRequestWithURL:@"http://google.com" completion:^(NSInteger statusCode) {
// examine the `statusCode` here
NSLog(@"%ld", (long)statusCode);
}];
// but the above runs asynchronously, so you won't have `statusCode` here
现在,显然您的完成处理程序参数通常会返回比整数 statusCode
更有意义的东西,但它说明了这个想法:不要尝试在不使用异步方法的情况下从异步方法返回值异步模式(例如完成处理程序)。
关于ios - NSHTTPURLResponse 为 nil 但未生成 NSError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47893916/
根据苹果... https://developer.apple.com/library/content/samplecode/URLCache/Listings/Classes_URLCacheCon
我正在使用一个 API,该 API 在一个名为 Link 的字段内为我提供页眉中的下一页。 (例如 Github 也是这样做的,所以这并不奇怪。Github Doc ) 我正在使用的服务通过以下方式检
我在 HTTP header 中使用 if-modified-since 来决定是否应该下载文件。应用程序已经过测试,一切正常,但现在当我询问我的 NSHTTPURLResponse 实例 respo
如果我使用 NSURLConnection 从服务器获取数据并且它发回以以下内容开头的响应: HTTP/1.1 406 这里有一些文本字符串 有什么方法可以检索状态文本“此处有一些文本字符串”?我知道
我正在使用 web 服务,当由于验证原因而失败时,错误消息在 StatusDescription 中。我需要一种方法来获取它并将其显示给用户,但我在 NSHTTPURLResponse 上看到的只是
我需要修改 NSURLResponse 中的响应 header 。这可能吗? 最佳答案 我刚刚和一个 friend 讨论过这个问题。我的建议是编写 NSURLResponse 的子类。大致如下: @i
请原谅我问这个愚蠢的问题,但是有人可以告诉我 NSURLResponse 和 NSHTTPURLResponse 之间有什么区别 最佳答案 "NSURLResponse declares the pr
我正在尝试返回变量 statusCode,该变量应该采用 NSHTTPURLResponse 的 statusCode 属性的值,但是即使我检查并看到数据已成功发布,我也得到零。它返回我初始化变量的
我有一个名为 APIManager 的类的扩展: import Alamofire import Foundation // MARK: - Logout extension APIManager {
我有一个有趣的问题:当我的设备处于飞行模式时,NSHHTPURLResponse 提供的 HTTP 状态代码是 200“OK”。 它不应该因错误而失败,或者至少不响应它与代码 200 的有效连接吗?
是否可以在不使用该方法的情况下修改 NSHTTPURLResponse 上的 header initWithURL:statusCode:HTTPVersion:headerFields: 创建一个新
为什么 -[[NSHTTPURLResponse allHeaderFields] valueForKey:] 不区分大小写,而手动创建的 NSDictionary 的 valueForKey: 不区
我看过很多代码,包括 Apple 的 SimpleURLConnections 示例,它们只是将任何 NSURLResponse 转换为 NSHTTPURLResponse。如果它始终是 NSHTTP
我正在尝试阅读 NSHTTPURLResponse状态代码,但是 NSHTTPURLResponse返回零,但没有 NSError已创建。 这在 iOS 11 之前有效,但我没有收到关于它已被弃用的警
我正在使用 OCMock 来模拟 NSURLConnection/NSURLResponse(是的,我知道这些已被弃用)并且一切正常,因为我希望它模拟 http 响应代码和 http 主体。现在我正在
这个问题在这里已经有了答案: How can I get the Data from NSURLSession.sharedSession().dataTaskWithRequest (2 个答案)
我有这段代码: let task = session.dataTaskWithRequest(request, completionHandler: { (data, response, error)
我正在尝试从 URL 获取 JSON 文件并使用 Swift 返回内容。但是,代码在 let httpResponse = response as! 行失败。以下代码中的 NSHTTPURLRespo
我有一个非常奇怪的问题,我正在请求一个 URL,我想从中获取 cookie,我使用这种方式获取 cookie: - (void)connection:(NSURLConnection *)connec
无法调用非函数类型“NSHTTPURLResponse?”的值? 有人可以帮我吗? 这是代码 public func responseObject(queue: dispatch_queue_t
我是一名优秀的程序员,十分优秀!