使用Alamofire时Heroku“请求中断”错误

时间:2015-01-15 03:59:00

标签: ios ruby-on-rails swift heroku alamofire

我正在使用Alamofire发出HTTP请求,该请求从Heroku上运行的Rails应用程序返回JSON。

进行HTTP GET调用时,我得到了这个NSError客户端:

Error Domain=NSURLErrorDomain Code=-1005 "The operation couldn’t be completed
(NSURLErrorDomain error -1005.)
" UserInfo=0x1700e6a00 
  {
   NSErrorFailingURLStringKey=https://********.herokuapp.com/api/workouts.json,
   NSErrorFailingURLKey=https://********.herokuapp.com/api/workouts.json,
   _kCFStreamErrorDomainKey=4, 
   _kCFStreamErrorCodeKey=-4, 
   NSUnderlyingError=0x17025c920 "The operation couldn’t be completed. (kCFErrorDomainCFNetwork error -1005.)"
  }

错误-1005是kCFURLErrorNetworkConnectionLost

在Heroku日志中,我得到了:

heroku[router]: sock=client at=error code=H18
desc="Request Interrupted"
method=GET path="/api/workouts.json" 
host=********.herokuapp.com 
request_id=826f4f74-a497-4462-a70b-cc5d352ef7b4
fwd="162.246.8.76" 
dyno=web.1 connect=1ms service=0ms status=503 bytes=0
2015-01-15T03:30:15.428551+00:00 app[web.1]: 
Started GET "/api/workouts.json" 
for 162.246.xxx.xxx at 2015-01-15 03:30:15 +0000

需要注意的重要部分是sock=client,这意味着请求在客户请求时被中断。

其他终端(例如sign_insign_up)会返回200 OK预期的有效负载。所以Rails App正在开发其他端点。

另请注意,curl在命令行上按预期工作:

curl -X GET 'https://********.herokuapp.com/api/workouts.json?email=****&token=****'

1 个答案:

答案 0 :(得分:1)

也许它会帮助某人:在我的情况下,我错误地发送了一个空字典作为参数:

var dictParams      = [String: String]()

Manager.sharedInstance
        .request(.GET, "\(K_API_MAIN_URL)\(k_API_XXXXXX)?access_token=\(strToken)", parameters: dictParams, encoding: .JSON)

解决方案是发送nil而不是上面的dictParams。

Manager.sharedInstance
        .request(.GET, "\(K_API_MAIN_URL)\(k_API_XXXXXX)?access_token=\(strToken)", parameters: nil, encoding: .JSON)