Я написал вспомогательный класс, с помощью которого я делаю все свои запросы на сервер (Rails 4.1). Большинство запросов в этом вспомогательном классе работают нормально, но один конкретный запрос терпит неудачу все время. Я использую Alamofire для моих запросов.NSErrorFailingURLStringKey (kCFErrorDomainCFNetwork error -1017) для конкретных запросов
Вот часть кода из моего вспомогательного класса:
let responseHandler = { (request: NSURLRequest, response: NSHTTPURLResponse?, object: AnyObject?, error: NSError?) -> Void in
println("request: \(request) || response: \(response) || object: \(object) || error: \(error)")
}
// make custom request
let request = NSMutableURLRequest(URL: NSURL(string: fullPath)!)
request.HTTPBody = NSJSONSerialization.dataWithJSONObject(["session_key": "ABC"], options: nil, error: nil)
request.HTTPMethod = "GET"
request.allHTTPHeaderFields = ["Accept": "application/json", "Content-Type": "application/json"]
Alamofire.request(request).response(responseHandler)
Вот выход из println
линии в приведенном выше коде:
request: <NSMutableURLRequest: 0x1702007e0> { URL: http:/wolverine.movie-assistor.staging.c66.me/user } || response: nil || object: Optional(<>) || error: Optional(Error Domain=NSURLErrorDomain Code=-1017 "The operation couldn’t be completed. (NSURLErrorDomain error -1017.)" UserInfo=0x1702ea780 {NSErrorFailingURLStringKey=http://wolverine.movie-assistor.staging.c66.me/user, NSErrorFailingURLKey=http://wolverine.movie-assistor.staging.c66.me/user, _kCFStreamErrorDomainKey=4, _kCFStreamErrorCodeKey=-1, NSUnderlyingError=0x174240240 "The operation couldn’t be completed. (kCFErrorDomainCFNetwork error -1017.)"})
Я попытался сбросить Simulator (так как я где-то читал его может быть проблемой симулятора) и попробовал на моем iPhone 6 - но проблема все равно остается прежней. Попытка того же URL-адреса с CocoaRESTClient
работала нормально, поэтому я сомневаюсь, что это проблема на стороне сервера (отходит до ожидаемого ответа {"session_key" : "missing"}
).
Кто-нибудь знает, в чем проблема?
EDIT # 1:
на стороне сервера, который работает на Rails 4.1 выглядит следующим образом (application_controller.rb
):
prepend_before_action :authenticate_session
def authenticate_session
if (session_key = params[:session_key]).nil?
forbidden(session_key: "missing")
elsif (session = Session.find_by(session_key: session_key)).nil?
forbidden(session_key: "unknown key")
elsif session.open != true
forbidden(session_key: "session closed")
end
end
def forbidden(object = {})
render json: make_hash(object), status: :forbidden
end
def make_hash(object)
if object.is_a?(ActiveRecord::Base)
return object.as_json
end
return object
end
EDIT # 2:
В то же время Я пробовал разные запросы, и получается, что тот же код на стороне сервера работает для всех типов запросов, за исключением запросов «GET» (я пробовал POST, PUT и DELETE spec ifically). Так может быть, тело HTTP должно быть другим для запросов GET?