サーバーへのすべてのリクエストを行うためのヘルパー クラスを作成しました (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 リクエストとは異なる必要があるのでしょうか?