Red de conocimientos turísticos - Información de alquiler - Por qué la aplicación web no se puede crear mediante . ¿Se puede utilizar net en Android?

Por qué la aplicación web no se puede crear mediante . ¿Se puede utilizar net en Android?

Cuando se utiliza la biblioteca OkHttp en Android, a veces es necesario conservar las cookies, entonces, ¿cómo lograrlo? El código fuente interno de OkHttp es demasiado complicado y no quiero profundizar en él. Aquí solo miro parte del código fuente en HttpEngineer. Se llamarán varios métodos de esta clase al iniciar y finalizar una solicitud. Primero veamos el método networkRequest, donde el objeto CookieHandler se obtiene a través de la función client.getCookieHandler (). La cookie se obtiene a través de este objeto y se establece en el encabezado de la solicitud. Una vez completada la solicitud, se obtiene la respuesta. Los encabezados de la solicitud se pasan a la función recibirHeaders a través de la función networkResponse.headers (). Las cookies obtenidas se almacenan en el objeto CookieHandler obtenido por getCookieHandler.

1

2

Tres

Cuatro

Cinco

Seis

p>

Siete

Ocho

Nueve

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

p>

32

33

34

35

36

37

38

39

40

41

Cuarenta y dos

43

Cuarenta y cuatro

45

46

47

48

Cuarenta y nueve

50

51

Cincuenta y dos

Este cliente no especificó un {@code Accept} predeterminado encabezado porque

* no sabe el tipo de contenido que le interesa a la aplicación.

*/

Solicitud privada networkRequest (Solicitud de solicitud) arroja IOException {

Solicitud. resultado del constructor = solicitud. nuevo constructor();

//Aquí se omiten N líneas de código. ......

CookieHandler CookieHandler = client . getcookiehandler();

if (cookieHandler!= null) {

//Capturar hasta ahora Solicitud Se agregaron encabezados para que puedan proporcionarse a CookieHandler.

//Esto se debe principalmente a la proximidad a RI; es poco probable que cualquiera de los encabezados anteriores

//afecte la selección de cookies que no sean las del host.

Mapa ltstring, string = " " gt gtheaders = ok encabezados a múltiples mapas (resultado . build().

headers(), null);

Map ltstring, string = " " gt gtcookies = cookiehandler get(request . uri(), headers

//Agregar a la solicitud). Cualquier cookie nueva.

OkHeaders.addCookies(resultado, cookies);

}

//Aquí se omiten N líneas de código. ......

Resultado de retorno. build();

} id-fragmento de datos = text 4df 17b 386793 c 68468195 a 690 c 917859 fragmento de datos guardado. = false data-csrftoken = bfkhge 1O-cy 7 wy 9d 6 w 70 f 6 qk 9 yukzhlyni 5g data-codata-status = hecho gt ltcode class = " hljs " java = " " gt/**

<; p>* Complete la solicitud con valores predeterminados y cookies.

*

* lt/code gt; ltp gt ltcode class = " hljs " java = " " gtEste cliente no especificó un encabezado {@code Accept} predeterminado porque

* no sabe el tipo de contenido que le interesa a la aplicación.

*/

Solicitud privada networkRequest (Solicitud de solicitud) arroja IOException {

Solicitud. resultado del constructor = solicitud. nuevo constructor();

//Aquí se omiten N líneas de código. ......

CookieHandler CookieHandler = client . getcookiehandler();

if (cookieHandler!= null) {

//Capturar hasta ahora Solicitud Se agregaron encabezados para que puedan proporcionarse a CookieHandler.

//Esto se debe principalmente a la proximidad a RI; es poco probable que cualquiera de los encabezados anteriores

//afecte la selección de cookies que no sean las del host.

Asignar ltstring, string = " " gt gtheaders = ok headers a multi map(resultado . build(). headers(), null);

Asignar ltstring, string = " " gt gtcookies = cookiehandler . get(request . uri(), headers);

//Agrega cualquier cookie nueva a la solicitud.

OkHeaders.addCookies(resultado, cookies);

}

//Aquí se omiten N líneas de código.

......

Devolver resultado .build();

} lt/string, gt lt/string, gt lt/code gt; cadena, gt lt/cadena, gt

1

2

tres

cuatro

cinco p>

Seis

Siete

ltcode class = " hljs " java = " " gt public void readResponse() lanza IOException {

/ /aquí se omiten n líneas de código. ......

recibir encabezados (respuesta de red. encabezados()).

//Aquí se omiten N líneas de código. ......

} lt/código gt;

1

2

Cuatro

Cinco

Seis

ltcode class = " hljs " java = " " gt public void recibir encabezados (Headers Headers) lanza IOException {

CookieHandler CookieHandler = cliente . getcookiehandler();

if (cookieHandler != null) {

cookiehandler . put(solicitud de usuario . uri(), OkHeaders.toMultimap(headers) , null));

}

} lt/code gt;

Y este objeto CookieHandler es un atributo en la clase OkHttpClient, que proporciona captadores y definidores. método. Constructor predeterminado OK http client = new OK http client(); Este objeto CookieHandler no se creará. Suponiendo que pasemos este objeto, OkHttp administrará automáticamente las cookies.

1

2

Tres

Cuatro

Cinco

Seis

p>

Siete

Ocho

Nueve

ltcode class = " hljs " cs = " " gtPrivate CookieHandler;

public OkHttpClient setCookieHandler(CookieHandler CookieHandler){

this . cookieHandler = cookieHandler

También esto

}

Público CookieHandler getCookieHandler(){

Devolver cookieHandler

} lt/code gt;

Así que supongamos que pasamos el objeto CookieHandler.

1

2

ltcode axapta = " " class = " hljs " gtOkHttpClient cliente = new OkHttpClient();

cliente . setcookiehandler(CookieHandler CookieHandler); lt/code gt;

Entonces, la clave ahora es cómo implementar este objeto CookieHandler. CookieManager es una subclase de CookieHandler y su constructor Public Cookie Manager (CookieStore, Cookie Policy) debe pasar dos parámetros. CookieStore es una interfaz, por lo que podemos implementar este objeto CookieHandler implementando el método abstracto en la interfaz de Cookie Store.

Referencia android-async-.kltz88.ok)

*Fecha: 2015-07-13

*Hora: 17:31

*/

Importar Java .io .io excepción;

Importar Java .io . objectinputstream;

Importar Java io . Java. io. Serializable;

Importar Java .net cookie http;

La clase pública SerializableHttpCookie implementa Serializable {

SerialVersionUID largo estático privado = 6374381323722046732.

HttpCookie final transitoria privada

Cookie de cliente HttpCookie transitoria privada

cookie http pública serializable (cookie http){

this.cookie = cookie

}

HttpCookie pública getCookie() {

HttpCookie bestCookie = cookie

if (clientCookie!= null) {

bestCookie = clientCookie

}

Devuelve bestCookie

}

Objeto de escritura vacío privado (flujo de salida del objeto) Lanza IOException {

fuera . writeobject(cookie. getname());

fuera . writeobject(cookie. getvalue());

fuera . obtener comentario());

salir . writeobject(cookie. getcommenturl());

salir . escribir largo(cookie. obtener maxage());

escribir int(cookie. getversion());

escribir boolean(cookie. obtener seguridad()); (cookie. get descartar());

}

El objeto de lectura nulo privado (ObjectInputStream in) arroja IOException, ClassNotFoundException {

Nombre de cadena =(

String)in . leer objeto();

Valor de cadena = (String)in leer objeto();

clientCookie = new HttpCookie(nombre, valor);

cookie de cliente . set comment((String)in . read object());

cookie de cliente .setcommenturl((String)in . read object());

cookie de cliente . setdomain((String)in . read object());

cookie de cliente set maxage(in . read long());

ruta de configuración de cliente (. (String)en . read object());

cookie del cliente .set portlist((String)in .read object());

cookie del cliente set version(in . readint());

cookie de cliente establecida segura(en . read boolean());

cookie de cliente configurada descarte(en . read boolean());

p>

}

} lt/código gt;