请求未发送

时间:2015-07-20 20:45:14

标签: ios swift ios8 nsurlconnection

当我从我的应用程序中使用API​​时,我遇到了一个奇怪的问题。有时,无论如何,请求都没有发送,并且在超时结束时失败并出现以下错误:

Error Domain=NSURLErrorDomain Code=-1001 "The request timed out."

我尝试了许多API,例如NSURLConnection代理,NSURLSessionNSURLConnection.sendSynchronousRequest但没有成功。

这是我为突出问题而做的示例项目。 ConnectionBugApp

以下是重现的步骤:

  • 在Xcode中运行应用程序并停止调试以便应用程序在您的手机上
  • 打开应用程序,单击“测试连接”(成功,加载轮后停止旋转)
  • 转到其他应用程序,例如facebook / twitter /网络游戏(有些有点重)并切换到飞行模式几次
  • 返回我的应用程序并单击测试连接(加载轮永不停止)

一些可能有用的细节:

  • 如果我使用服务器IP而不是我的域名,则会成功

  • 仅在LTE / 4G网络上出现问题

任何想法或解决方法将不胜感激!请随时询问更多详细信息。

由于

修改

自从我第一次发布以来,我已经编辑了很多描述(希望能让它更清晰,更清晰),如果有些答案或评论不再有意义,我很抱歉。< / p>

4 个答案:

答案 0 :(得分:2)

使用异步请求时遇到过这个问题。似乎iOS限制了到单个域的开放连接数,因此所有后续连接都以您描述的方式失败。

如果连接通常很快完成,这可能不会成为问题。

解决方案是限制同一​​域的开放连接数,以防止这种情况发生。

karlos 发布的答案有效,因为连接的同步性会阻止其他人被打开。

答案 1 :(得分:2)

如评论中所述,我的托管服务启用了DNSSEC(缓存中毒保护)。

禁用它,修复了问题,即使这可能不是一个非常好的解决方案。经过几周的搜索,这将是足够好的。

我会给那些可以解释它的人,或者谁能提供更好的解决方案。

答案 2 :(得分:1)

在您的代码中,您的请求默认超时为60秒,但您可以在代码中更改请求超时,如下所示。

init(request:NSMutableURLRequest){ self.request = request self.request.timeoutInterval = 120 super.init() } 班级更改时间。

class Fizz { def fizzName }
class Buzz { def buzzName }
class Foo { def fooName }

class Widget {
   Fizz fizz
   List<Buzz> buzzes
   List<Foo> foos
}

答案 3 :(得分:0)

尝试使用以下代码进行连接。这会对您有所帮助。

ViewState

您可以在以下链接中获取HTTPS状态代码列表 StatusCode