4

サーバーへのすべてのリクエストを行うためのヘルパー クラスを作成しました (Rails 4.1)。このヘルパー クラス内のほとんどのリクエストは正常に機能しますが、特定のリクエストが常に失敗しています。リクエストには Alamofire を使用しています。

ヘルパー クラスのコードの一部を次に示します。

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.)"})

シミュレーターをリセットしてみました (シミュレーターの問題である可能性があることをどこかで読んだため)、iPhone 6 で試してみましたが、問題は同じままです。正常に機能した同じ URL を試してみたCocoaRESTClientので、サーバー側の問題であるとは思えません (期待される応答のままになります{"session_key" : "missing"})。

誰が問題が何であるか知っていますか?

編集#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

編集#2:

その間、さまざまなリクエストを試してみましたが、サーバー側の同じコードが「GET」リクエストを除くすべてのリクエストタイプで機能することがわかりました(具体的にはPOST、PUT、およびDELETEを試しました)。では、HTTP ボディは GET リクエストとは異なる必要があるのでしょうか?

4

2 に答える 2