     private static func responseString(
         with request: DataRequest,
         success: @escaping SuccessTask,
-        failure: @escaping FailTask
+        failure: @escaping FailureTask
     ) {
         request.responseString { (responseString) in
-            print("RGNetwork request debugDescription: \n", responseString.debugDescription, separator: "")
+            print("RGNetwork.request.debugDescription: \n\(responseString.debugDescription)")
 
             let httpStatusCode = responseString.response?.statusCode
-            guard let string = responseString.value else {
-                failure(responseString.error, httpStatusCode, request, .string(responseString))
+            var responseData = Data()
+            if let data = responseString.data {
+                responseData = data
+            }
+            let string = String(data: responseData, encoding: .utf8)
+            guard let code = httpStatusCode, code >= 200 && code < 300 else {
+                failure(responseString.error, string, responseString.data, httpStatusCode, request, .string(responseString))
                 RGNetwork.hideIndicator()
                 return
             }
 
-            success(nil, string, responseString.data, httpStatusCode, request, .string(responseString))
+            guard let resString = responseString.value else {
+                success(nil, nil, responseString.data, httpStatusCode, request, .string(responseString))
+                RGNetwork.hideIndicator()
+                return
+            }
+
+            success(nil, resString, responseString.data, httpStatusCode, request, .string(responseString))
             RGNetwork.hideIndicator()
         }
     }

}


//  MARK: - Private Methods

extension RGNetwork {

    private static func responseJSON(
        with request: DataRequest,
        success: @escaping SuccessTask,
        failure: @escaping FailTask
    ) {
        request.responseJSON { (responseJSON) in
            print("RGNetwork request debugDescription: \n", responseJSON.debugDescription, separator: "")

            let httpStatusCode = responseJSON.response?.statusCode
            guard let json = responseJSON.value else {
                failure(responseJSON.error, httpStatusCode, request, .json(responseJSON))
                RGNetwork.hideIndicator()
                return
            }
            var responseData = Data()
            if let data = responseJSON.data {
                responseData = data
            }
            let string = String(data: responseData, encoding: .utf8)

            success(json as? [String : Any], string, responseJSON.data, httpStatusCode, request, .json(responseJSON))
            RGNetwork.hideIndicator()
        }
    }

    private static func responseData(
        with request: DataRequest,
        success: @escaping SuccessTask,
        failure: @escaping FailureTask
    ) {
        request.responseData { (responseData) in
            print("RGNetwork.request.debugDescription: \n\(responseData.debugDescription)")

            let httpStatusCode = responseData.response?.statusCode
            guard let data = responseData.value else {
                failure(responseData.error, nil, nil, httpStatusCode, request, .data(responseData))
                RGNetwork.hideIndicator()
                return
            }
