En esta publicación, le brindaremos información sobre la impresión de solicitudes de datos utilizando un URLProtocol personalizado: código en línea. Escuche que le daremos detalles sobre la impresión de solicitudes de datos utilizando un protocolo de URL personalizado: código en línea y cómo usarlo, también le daremos una demostración si es necesario.
Casi todas las aplicaciones contienen algún tipo de solicitud de datos. La impresión de solicitudes de datos a veces puede ser útil para fines de depuración. Esto se puede hacer bastante fácil usando un archivo personalizado URLProtocol
.
Creación de un protocolo URL personalizado
Se necesita una costumbre URLProtocol
para imprimir las solicitudes de datos. Una implementación personalizada de URLProtocol
incluir el canInit
método es suficiente para este caso.
/// A custom protocol for logging outgoing requests.
final class PrintProtocol: URLProtocol {
override open class func canInit(with request: URLRequest) -> Bool {
// Print valuable request information.
print("? Running request: (request.httpMethod ?? "") - (request.url?.absoluteString ?? "")")
// By returning 'false', this URLProtocol will do nothing less than logging.
return false
}
}
El protocolo será mayormente ignorado mientras regresamos false
. Solo se usa para imprimir y no afectará las solicitudes salientes.
Habilitación del protocolo
El protocolo debe habilitarse antes de que comience a funcionar. Esto se puede hacer con una simple línea de código:
// Register the custom URL Protocol.
URLProtocol.registerClass(PrintProtocol.self)
Aunque esto suele ser suficiente para que funcione, a veces es necesario crear su propia configuración de sesión personalizada. Esto también cuenta para el uso con Alamofire .
let configuration = URLSessionConfiguration.default
configuration.protocolClasses?.insert(PrintProtocol.self, at: 0)
let sessionManager = Alamofire.SessionManager(configuration: configuration)
sessionManager.request("https://www.onlinecode.org/feed/")
Para obtener más información sobre el uso avanzado con Alamofire, consulte su documentación .
? Running request: GET - https://www.onlinecode.org/feed/
✅ Request completed
El uso de este código de patio de recreo le da el resultado anterior:
import Foundation
import PlaygroundSupport
PlaygroundPage.current.needsIndefiniteExecution = true
/// A custom protocol for logging outgoing requests.
final class PrintProtocol: URLProtocol {
override open class func canInit(with request: URLRequest) -> Bool {
// Print valuable request information.
print("? Running request: (request.httpMethod ?? "") - (request.url?.absoluteString ?? "")")
// By returning 'false', this URLProtocol will do nothing less than logging.
return false
}
}
// Register the custom URL Protocol.
URLProtocol.registerClass(PrintProtocol.self)
// Execute a data request.
URLSession.shared.dataTask(with: URL(string: "https://www.onlinecode.org/feed/")!) { (_, _, _) in
print("✅ Request completed")
}.resume()
Un uso avanzado de un URLProtocol personalizado
Este es solo un ejemplo simple de lo que puede hacer con un archivo personalizado URLProtocol
. Las implementaciones más avanzadas le permiten, por ejemplo, simular sus pruebas unitarias. Puede consultar el marco Mocker de WeTransfer para inspirarse.
0 Comentarios