Saltar al contenido principal

Realizar una solicitud PUT (http.put)

Declaración

código_http, texto_json_cabeceras, cuerpo_respuesta = http.put(URL [, segundos_espera, cabeceras, datos_cuerpo_de_solicitud, URL_NO_ESCAPE ])

Declaración (parámetros con nombre)

Compatible desde 20250625; los parámetros de progreso son compatibles a partir de las versiones posteriores a 20260402

código_http, texto_json_cabeceras, cuerpo_respuesta = http.put{
url = URL;
timeout = segundos_espera;
headers = cabeceras;
params = parámetros_Query;

-- Los siguientes parámetros del cuerpo no pueden coexistir; el orden de prioridad es multipart > data > json > upload_file
multipart = formulario_multipart_del_cuerpo;
data = datos_del_cuerpo;
json = JSON_del_cuerpo;
upload_file = ruta_del_archivo_que_se_subirá;

download_file = ruta_para_guardar_el_cuerpo_devuelto_si_la_solicitud_tiene_éxito;
progress = función_de_retorno_de_progreso;
progress_interval_ms = intervalo_de_progreso_en_milisegundos;
}

Parámetros

  • URL
    Tipo texto; dirección URL que se debe solicitar. Este método aplica escape a la URL de forma predeterminada; si no se necesita, consulta la descripción del parámetro URL NO ESCAPE
  • Segundos de espera
    Tipo real, parámetro opcional; tiempo de espera de la solicitud, en segundos; valor predeterminado 10
  • Cabeceras
    Tipo tabla, parámetro opcional; información de las cabeceras de la solicitud enviada, con la forma {field1 = value1, field2 = value2, ...}; valor predeterminado {}
  • Parámetros Query
    Tipo tabla, parámetro opcional; parámetros Query de la solicitud enviada, con la forma {field1 = value1, field2 = value2, ...}; valor predeterminado {}
  • Datos del cuerpo de la solicitud
    Tipo cadena, parámetro opcional; contenido que se envía mediante PUT; cadena vacía de forma predeterminada
    20250625 Si es de tipo tabla, se codifica y se envía como application/x-www-form-urlencoded
  • Formulario multipart del cuerpo de la solicitud
    Tipo tabla, parámetro opcional; datos del formulario multipart que se envían mediante PUT, con la forma {field1 = value1, field2 = value2, ...}; valor predeterminado {}
  • JSON del cuerpo de la solicitud
    Tipo tabla, parámetro opcional; se codifica y se envía como application/json
  • Ruta del archivo que se subirá como cuerpo de la solicitud
    Tipo texto, parámetro opcional; envía directamente los datos del archivo como cuerpo de la solicitud
  • Ruta para guardar el cuerpo devuelto cuando la solicitud tiene éxito
    Tipo texto, parámetro opcional; si se proporciona, el cuerpo devuelto tras una solicitud exitosa es la ruta donde se ha guardado
  • Función de retorno de progreso
    Tipo función, parámetro opcional, compatible a partir de las versiones posteriores a 20260402. Se llama cuando cambia el progreso de carga o descarga; su primer parámetro es la información de progreso actual
  • Intervalo de la función de retorno de progreso en milisegundos
    Tipo entero, parámetro opcional, compatible a partir de las versiones posteriores a 20260402. Controla el intervalo de activación de la función de retorno de progreso, en milisegundos
  • URL NO ESCAPE
    Tipo booleano, parámetro opcional; true solicita directamente sin aplicar escape a la URL y false es el valor predeterminado
    Para aplicar un escape personalizado a la URL, consulta el módulo lcurl, easy:escape y easy:unescape

Valores devueltos

  • Código de estado HTTP
    Tipo entero; devuelve el código de estado HTTP de esta solicitud; devuelve -1 si se agota el tiempo de espera
  • Texto JSON de las cabeceras devueltas
    Tipo texto o nil; información de las cabeceras en formato JSON devuelta al completar la solicitud; devuelve nil si se agota el tiempo de espera
  • Cuerpo devuelto
    Tipo cadena o nil; contenido devuelto al completar la solicitud; si el cuerpo se guarda en un archivo, este valor es la ruta del archivo; devuelve nil si se agota el tiempo de espera

Descripción

Usa el método PUT del protocolo HTTP/1.1 para enviar datos a la red; su uso es coherente con POST
Esta función puede ceder; antes de que devuelva el control, otros hilos pueden tener la oportunidad de ejecutarse

La función de retorno de progreso recibe una estructura info con la siguiente forma:

{
count_of_bytes_sent = bytes_enviados;
count_of_bytes_expected_to_send = bytes_que_se_espera_enviar;
count_of_bytes_received = bytes_recibidos;
count_of_bytes_expected_to_receive = bytes_que_se_espera_recibir;
}

Ejemplo

local code, res_headers, body = http.put("https://httpbin.org/put?hello=world&你好=世界", 15, {
["User-Agent"] = "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0)", -- Simula una solicitud de IE8
["Cookie"] = "a=1; b=2; c=3"; -- Envía también la cookie
}, "需要发送过去的数据")
if code == 200 then -- Si el código de estado devuelto es HTTP_OK
sys.alert(body)
end

Nota: el código anterior utiliza la función sys.alert, que no pertenece a este capítulo

Ejemplo (parámetros con nombre)

local code, res_headers, body = http.put{
url = "https://httpbin.org/put";
timeout = 15;
headers = {
["User-Agent"] = "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0)"; -- Simula una solicitud de IE8
["Cookie"] = "a=1; b=2; c=3"; -- Envía también la cookie
};
params = {
["hello"] = "world";
["你好"] = "世界";
};
data = "需要发送过去的数据";
}
if code == 200 then -- Si el código de estado devuelto es HTTP_OK
sys.alert(body)
end

Nota: el código anterior utiliza la función sys.alert, que no pertenece a este capítulo