servicio consumir ios debugging afnetworking-2 alamofire

ios - consumir servicio rest swift 4



¿Cómo puedo registrar cada solicitud/respuesta usando Alamofire? (5)

¿Hay alguna manera de registrar cada solicitud / respuesta usando Alamofire (algo similar a AFNetworkActivityLogger)?

Soy consciente de Printable, DebugPrintable y Output (cURL) pero no son exactamente lo que estoy buscando.


Agregando a la respuesta anterior para Alamofire 4.0+ Swift 3

extension DataRequest { public func LogRequest() -> Self { //Your logic for logging return self } }

Cuando solicita

Alamofire.request(requestUrl, method: .post, parameters: parameter, encoding: JSONEncoding.default) .LogRequest() .responseJSON { response in //Do your thing }

Si desea cancelar la solicitud en cualquier caso (que era algo que yo quería) puede self.cancel() cualquier lugar antes de regresar a sí mismo


Algo como esto podría ser lo que estabas buscando:

extension Request { public func debugLog() -> Self { #if DEBUG debugPrint(self) #endif return self } }

Uso:

Alamofire.request(.GET, "http://httpbin.org/get", parameters: ["foo": "bar"]) .debugLog() .response {…}

Si desea imprimir todas las respuestas, puede escribir su propio método de respuesta, similar al método responseObject () en la parte superior de este tutorial:

http://www.raywenderlich.com/87595/intermediate-alamofire-tutorial

[Actualización: agregada a continuación según la solicitud de @trauzti.]

Así es como se podría hacer el enfoque responseObject () para imprimir el resultado en cada solicitud.

Lector de advertencias: no he probado personalmente este código, y probablemente tomaría diferentes decisiones en producción. Esto simplemente muestra cómo el código tutorial de Wenderlich puede incluir el registro de depuración. También tenga en cuenta: dado que el tutorial es anterior a Swift 2.0, he usado el antiguo println () en lugar de print ().

@objc public protocol ResponseObjectSerializable { init(response: NSHTTPURLResponse, representation: AnyObject) } extension Alamofire.Request { public func responseObject<T: ResponseObjectSerializable>(completionHandler: (NSURLRequest, NSHTTPURLResponse?, T?, NSError?) -> Void) -> Self { let serializer: Serializer = { (request, response, data) in #if DEBUG println("Request: /(request.URL)") #endif let JSONSerializer = Request.JSONResponseSerializer(options: .AllowFragments) let (JSON: AnyObject?, serializationError) = JSONSerializer(request, response, data) if response != nil && JSON != nil { #if DEBUG println("Response:") debugPrint(JSON) #endif return (T(response: response!, representation: JSON!), nil) } else { #if DEBUG println("Failed Serialization:") debugPrint(serializationError) #endif return (nil, serializationError) } } return response(serializer: serializer, completionHandler: { (request, response, object, error) in completionHandler(request, response, object as? T, error) }) } }


Hay una pequeña y dulce cápsula para esto: https://github.com/konkab/AlamofireNetworkActivityLogger

Agregue esto a su podfile:

pod ''AlamofireNetworkActivityLogger'', ''~> 2.0''

En su AppDelegate:

import AlamofireNetworkActivityLogger

Luego en su didFinishLaunchingWithOptions , agregue esto:

NetworkActivityLogger.shared.level = .debug NetworkActivityLogger.shared.startLogging()

EDITAR: he encontrado bloqueos con esto en producción. Para estar seguro, usa "indicadores de compilación" para usar solo esto en la depuración, algo como esto:

#if DEBUG NetworkActivityLogger.shared.level = .debug NetworkActivityLogger.shared.startLogging() #endif


Timberjack es lo que estás buscando. Timberjack es un registrador de actividad de red simple y poco intrusivo. Registre cada solicitud que hace su aplicación, o limite solo a aquellos que usan cierta sesión de NSURLS, si así lo prefiere. También funciona con Alamofire, si eso es lo tuyo.

https://cocoapods.org/pods/Timberjack

uso:

import Alamofire import Timberjack class HTTPManager: Alamofire.Manager { static let sharedManager: HTTPManager = { let configuration = Timberjack.defaultSessionConfiguration() let manager = HTTPManager(configuration: configuration) return manager }() }


SOLUCIÓN PARA SWIFT 3.0+

Para el parámetro y los encabezados de solicitud de impresión:

Alamofire.request(url, method: .get, parameters: parameters, headers: headers) .validate() .responseObject { (response: DataResponse<T>) in self.pendingRequests.removeValue(forKey: endPoint) completion!(response) if(NetworkConfig.loggingEnable) { debugPrint("************* printing REQUEST parameter and Headers *************") debugPrint("RESPONSE : /(response.debugDescription)") } }.responseDebugPrint()

Para la respuesta de impresión . use debajo de la extensión

import Foundation import Alamofire extension Alamofire.DataRequest { func responseDebugPrint() -> Self { if NetworkConfig.loggingEnable { return responseJSON() { response in if let JSON = response.result.value, let JSONData = try? JSONSerialization.data(withJSONObject: JSON, options: .prettyPrinted), let prettyString = NSString(data: JSONData, encoding: String.Encoding.utf8.rawValue) { print(prettyString) } else if let error = response.result.error { print("Error Debug Print: /(error.localizedDescription)") } } } return self } }

Pequeña idea para usted: https://gist.github.com/manishpathak99/348f2eb0167c0ff6e12ecd667612bc9b/edit