Red de conocimiento informático - Aprendizaje de programación - Cómo configurar el tiempo de espera de solicitud para la red de solicitudes okhttp

Cómo configurar el tiempo de espera de solicitud para la red de solicitudes okhttp

okHttp puede manejar una gran cantidad de fallas de red: soluciona automáticamente muchos problemas de conexión comunes. Si el servidor está configurado con varias direcciones IP, OkHttp probará automáticamente la siguiente IP cuando falle la primera conexión IP.

OkHttp es una solución relativamente madura. Se dice que el código fuente de Android 4.4 muestra que HttpURLConnection ha sido reemplazado por la implementación de OkHttp. Por tanto, tenemos más razones para creer en el poder de OkHttp.

1. Método de solicitud HTTP

Solicitud GET sincrónica

Cliente OkHttpClient final privado = nuevo OkHttpClient();

Ejecución vacía pública ( ) arroja una excepción {

Solicitud de solicitud = new Request.Builder()

.url("/helloworld.txt")

.build();

Respuesta respuesta = client.newCall(solicitud) .execute();

if (!response.isSuccessful())

throw new IOException(respuesta "Código inesperado");

EncabezadosrespuestaHeaders = respuesta.headers();

for (int i = 0; i lt;respuestaHeaders.size(); i ) {

Sistema .out.println(responseHeaders.name(i) ": " ResponseHeaders.value(i));

}

System.out.println(response.body().string ());

}

El método string() de la clase Response cargará todo el contenido del documento en la memoria y es adecuado para documentos pequeños. Para documentos de más de 1M, debes usar el método stream() para obtenerlos.

response.body().byteStream()

Solicitud GET asincrónica

Cliente OkHttpClient final privado = nuevo OkHttpClient();

public void run() lanza una excepción {

Solicitud de solicitud = new Request.Builder()

.url("/helloworld.txt")

.build ();

client.newCall(request).enqueue(new Callback() {

@Override

public void onFailure(Solicitud de solicitud, IOException e) {

e.printStackTrace();

}

@Override

public void onResponse(Respuesta de respuesta) lanza IOException {

p>

if (! Response.isSuccessful()) {

throw new IOException(respuesta "Código inesperado");

}

Encabezados ResponseHeaders = respuesta.headers();

for (int i = 0; i lt. ResponseHeaders.size(); i ) {

System.out.println (responseHeaders.name( i) ": " ResponseHeaders.value(i));

}

System.out.println(response.body().string());

}

});

}

Leer la respuesta bloqueará el hilo actual, por lo que la solicitud se inicia en el hilo principal. hilo, y el contenido de la devolución de llamada no está en el hilo principal.

Método POST para envío de cadenas

MediaType final estático privado MEDIA_TYPE_MARKDOWN

= MediaType.parse("text/x-markdown; charset=utf-8" ) ;

Cliente OkHttpClient final privado = nuevo OkHttpClient();

ejecución pública void() lanza una excepción {

String postBody = ""

" Lanzamientos\n"

"--------\n"

"\n"

" * _1.0_ Mayo 6, 2013\n"

" * _1.1_ 15 de junio de 2013\n"

" * _1.2_ 11 de agosto de 2013\n" ;

Solicitud de solicitud = new Request.Builder()

.url("/markdown/raw")

.post(RequestBody.create(MEDIA_TYPE_MARKDOWN. postBody))

.build();

Respuesta respuesta = client.newCall(request).execute();

if (!response.isSuccess()

if (!response.isSuccess()

if (!isSuccessful())

throw new IOException(respuesta "Código inesperado");

Sistema .out.println(response.body().string());

}

Dado que todo el cuerpo de la solicitud está en la memoria, debe evitar enviar archivos de más de 1 M .

El método POST menciona el intercambio

Cliente OkHttpClient final privado = nuevo OkHttpClient();

ejecución pública void() arroja una excepción {

RequestBody requestBody = new RequestBody() {

@Override

public MediaType contentType() {

return MEDIA_TYPE_MARKDOWN;

}< / p>

@ Override

public void writeTo(BufferedSink fregadero) lanza IOException {

fregadero.writeUtf8("Numbers\n");

fregadero .writeUtf8("---- ---\n");

for (int i = 2; i lt; = 997; i) {

fregadero.writeUtf8 ( String.format(" * s = s\n", i, factor(i)))

}

}

factor de cadena privada(int n ) {

for (int i = 2; i lt; n; i) {

int x = n / i

if (x * i; == n) factor de retorno(x) " × " i;

}

return Integer.toString(n); p> };

Solicitud de solicitud = new Request.Builder()

.url("/markdown/raw")

.post( requestBody)

.build();

Respuesta respuesta = client.newCall(request).execute()

if (!response.isSuccessful())

p>

throw new IOException(respuesta "Código inesperado");

System.out.println(response.body().string());

}< / p>

Utilice el marco Okio para transmitir escrituras para que no haya problemas de desbordamiento de memoria.

Método POST para enviar archivos

MediaType final estático público MEDIA_TYPE_MARKDOWN

= MediaType.parse("text/x-markdown; charset=utf-8") ;

Cliente OkHttpClient final privado = nuevo OkHttpClient();

ejecución nula pública() arroja una excepción {

Archivo archivo = nuevo Archivo("README.md ");

Solicitud de solicitud = new Request.Builder()

.url("/markdown/raw")

.post(RequestBody.create( MEDIA_TYPE_MARKDOWN, archivo))

.build();

Respuesta respuesta = client.newCall(request).execute();

if (!response.isSuccessful())

throw new IOException (respuesta "Código inesperado");

System.out.println(response.body().string());

Envíe el formulario mediante POST

cliente OkHttpClient final privado = new OkHttpClient();

ejecución pública void() lanza una excepción {

RequestBody formBody = new FormEncodingBuilder()

.add("search", "Jurassic Park")

.build()

Solicitud de solicitud = new; Solicitud .Builder()

.url("/endpoints/image

RequestBody requestBody = new MultipartBuilder()

.type(MultipartBuilder.FORM)

.addPart(

Headers.

.addPart(

Headers.of("Contenido-Disposición", "formulario-datos; nombre = \"título\""),

RequestBody.create(null, "Logotipo cuadrado"))

.addPart(

Headers.of(" Contenido - Disposición", "form-data; name=\"image\""),

RequestBody.create(MEDIA_TYPE_PNG, new File("sitio web/static/logo-squ

are.png")))

.p> .build();

Solicitud de solicitud = new Request.Builder()

.header("Autorización ", "ID de cliente " IMGUR_CLIENT_ID)

.url("/3/ imagen")

.post(requestBody)

.build();

Respuesta respuesta = client.newCall(request).execute();

if (!response. isSuccessful()))

throw new IOException(" Código inesperado " respuesta);

System.out.println(response.body().string());

}< /p