Red de conocimiento informático - Material del sitio web - Basado en OkHttp3 y agregando la función HttpDns

Basado en OkHttp3 y agregando la función HttpDns

HttpDns obtiene la dirección IP requerida para la próxima solicitud comercial a través de solicitudes de red.

Cuando se utiliza HttpDns, cuando Android envía una solicitud de red, solicitará el dns local o el servicio dns del operador local para obtener la IP de destino. Sin embargo, una vez que el dns predeterminado que utiliza no es confiable ni confiable, entonces. La estabilidad de la solicitud se reducirá e incluso puede ser secuestrada.

Por lo tanto, si puede utilizar su propio servidor DNS de confianza para la resolución de nombres de dominio DNS, este riesgo se reducirá considerablemente.

Uno de los aspectos más destacados de OkHttp3 es su potente mecanismo Interceptor. Por tanto, HttpDns tiene dos puntos de integración en todo el proceso de lanzamiento de la solicitud:

Usar Interceptor para conexión directa IP tendrá las siguientes ventajas:

Si utilizas el dns que viene con OkHttp ( ), las ventajas son:

En resumen, es más científico utilizar la interfaz Dns nativa de OkHttp. A menos que no se requieran cookies y no se utilice HTTPS, es más apropiado utilizar Interceptor para escenarios simples.

Utilice RouteDatabase en OkHttp para monitorear y enviar comentarios cada vez que se usa IP:

Para poder reutilizar, deberíaPostpone() para obtener los resultados de juicio de okhttp sobre la disponibilidad de IP, de modo que el administrador personalizado puede El juicio de disponibilidad de IP es consistente con okhttp, por lo que para actualizar la propia lista de IP del Administrador, el objeto RouteDatabase se puede obtener a través de

Internal.instance.routeDatabase(getConnectionPool());

Internal.instance se asigna después de crear una instancia de OkHttpClient. De hecho, Internal.instance es OkHttpClient. Entonces puedes usar NetworkInterceptor para obtener RouteDatabase. Es decir:

Manager mantiene dos mapas de lista.

interceptors.addAll(client.interceptors()) es para agregar todos los Interceptores al agregar Interceptor a la lista y luego agregar el procesamiento central OkHttpCore. Interceptador.

Si esta solicitud es una solicitud que necesita pasar por la red, todos los interceptores se agregarán a la lista cuando se agregue addNetInterceptor. Finalmente, se agregó CallServerInterceptor para manejar solicitudes de red reales.

Este orden puede garantizar que durante el proceso de llamada recursiva, el interceptor personalizado solo afectará antes o después del proceso de procesamiento de OkHttpCore, y el proceso central dentro del Core no se verá afectado.