【问题标题】:iOS App shows "Request time out" error when there is network有网络时,iOS App 显示“请求超时”错误
【发布时间】:2020-02-07 11:50:21
【问题描述】:
  • 向我的服务器发出请求时,我的应用会间歇性地抛出“请求超时”错误。
  • 有时会持续发生,只有退出并重新启动应用才能解决问题。
  • 我们有一个代理服务器来跟踪我对服务器的请求的错误。 当时对代理服务器的所有调用以跟踪错误都是成功的
  • 这断定这不是网络问题,也不是来自应用程序的多个同时请求,因为请求正在到达代理服务器。
  • 增加 timeOut 间隔并不能解决问题。
  • 失败请求发送的api和params都没有问题,和我们收到成功响应时一样。

代码块:



    NSURL *url = [NSURL URLWithString:</* my urlString> */];
    NSData *postData = // My data
    NSString *postLength = [NSString stringWithFormat:@"%lu", (unsigned long)[postData length]];

 // Creating URLRequest
    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
    [request setTimeoutInterval:120];
    [request setHTTPBody:postData];
    [request setValue:postLength forHTTPHeaderField:@"Content-Length"];
    [request setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"];
    [request setHTTPMethod:@"POST"];

// Creating NSURLSession and sending the request

    NSURLSessionConfiguration *configuration = [NSURLSessionConfiguration defaultSessionConfiguration];
    configuration.requestCachePolicy = NSURLRequestReloadIgnoringLocalCacheData;
    configuration.URLCache = nil;
    NSURLSession *session = [NSURLSession sessionWithConfiguration:configuration];  
 NSURLSessionDataTask *task = [session dataTaskWithRequest:request completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {
// Response handling
}

有人可以帮忙吗?请建议是否还必须从服务器端检查任何内容。

【问题讨论】:

  • 请在问题中包含一些 Obj-C 网络代码。
  • 已按要求添加代码。

标签: ios objective-c httprequest nsurlsession


【解决方案1】:

您必须将 NSAppTransportSecurity 密钥添加到项目的 info.plist 文件中。

<key>NSAppTransportSecurity</key>
<dict>
    <key>NSAllowsArbitraryLoads</key>
    <true/>
</dict>

【讨论】:

  • 你在使用 Alamofire 还是什么?如果是,那么有一个属性可以设置 Timeout 回调。
  • 不使用 Alamofire。使用问题中提到的 NSURLSession。
【解决方案2】:

Request Time Out 仅表示您的应用程序发送的请求无法在给定的时间间隔内返回您的应用程序并做出响应,这背后可能有数百个原因,我建议您进行以下故障排除:

  • 删除您的应用和服务器之间的代理服务器
  • 增加应用中的请求超时间隔
  • 尝试使用一些 http 客户端发送请求,例如 postman

【讨论】:

  • - 中间不使用代理服务器。对代理服务器的另一个跟踪错误的请求成功,对服务器的调用失败,请求超时。如前所述,增加请求超时并不能解决问题。从邮递员发送将是成功的,因为这不是请求的问题。重新启动应用后,同样的请求也可以从应用中运行。
  • 如果在您第二次启动应用程序时它正在工作,则意味着您的代码或应用程序设置没有任何问题,这可能是您第一次启动应用程序时的互联网可用性问题时间,确保应用程序处于调试模式时互联网工作正常。
猜你喜欢
  • 2011-07-11
  • 1970-01-01
  • 1970-01-01
  • 2017-09-21
  • 1970-01-01
  • 2021-10-26
  • 2015-06-08
  • 1970-01-01
相关资源
最近更新 更多