2014-12-17 5 views
1

Я написал вспомогательный класс, с помощью которого я делаю все свои запросы на сервер (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?

ответ

6

Как я прочитал here отправка тела HTTP с запросами GET противоречит спецификации HTTP/1.1 и, таким образом, не поддерживается в Rails. Я не знал этого, поэтому отправлю свои данные по параметрам URL. Может быть, кто-то еще сталкивается с этим, и это может помочь.

4

У меня нет репутации, так косяка upvote но Той очень много для решения и полностью помогли :) Вот что я сделал для стрижа:

request.HTTPBody = nil 
request.addValue("0", forHTTPHeaderField: "Content-Length") 

 Смежные вопросы

  • Нет связанных вопросов^_^