Foros del Web » Programando para Internet » PHP »

Hacer en una misma petición varios POST Curl API

Estas en el tema de Hacer en una misma petición varios POST Curl API en el foro de PHP en Foros del Web. Hola, Estoy intentando hacer de alguna manera en una misma petición varios POST con CURL, me explico. Estoy usando la librería PhpExcel, la idea es ...
  #1 (permalink)  
Antiguo 11/11/2019, 08:09
 
Fecha de Ingreso: junio-2011
Mensajes: 44
Antigüedad: 12 años, 10 meses
Puntos: 2
Hacer en una misma petición varios POST Curl API

Hola,

Estoy intentando hacer de alguna manera en una misma petición varios POST con CURL, me explico.

Estoy usando la librería PhpExcel, la idea es subir un fichero excel que contiene una tabla con varios registros y los nombres del campo, con una función de PhpExcel voy recorriendo cada registro, por lo que lo guardo en un array.

El siguiente paso es realizar una petición que vaya enviando cada uno de los registros a una url, en este caso es una url de una API para editar varios productos, esperando párametros(que son cada uno de los campos que se envía en un registro) , la función para enviar una sola petición la tengo ya armada, solo necesito saber como puedo enviar varios registros la a vez en una sola petición.

Resumen:
1º Subo el fichero excel que contiene varios registros.(hecho)

2º Guardo estos registros en un array por medio de una función que recoje el contenido de PhpExcel(hecho)

3º Realizar una petición POST con CURL que recorra cada uno de los registros y enviarlos a la vez(he conseguido solo enviar un solo registro)
  #2 (permalink)  
Antiguo 11/11/2019, 08:25
 
Fecha de Ingreso: abril-2011
Mensajes: 170
Antigüedad: 13 años
Puntos: 68
Respuesta: Hacer en una misma petición varios POST Curl API

El hecho de que puedas enviar varios registros en una misma petición no depende de ti, sino del API que estés utilizando.

Muchos APIs procesan además de application/x-www-form-urlencoded, application/json. Si soporta JSON, no tendrías mayor problema en serializar los registros con json_encode y enviarlos todos en una única petición.

Debes consultar la documentación acerca de dicho API.
  #3 (permalink)  
Antiguo 11/11/2019, 10:24
 
Fecha de Ingreso: junio-2011
Mensajes: 44
Antigüedad: 12 años, 10 meses
Puntos: 2
Respuesta: Hacer en una misma petición varios POST Curl API

Gracias por su ayuda,

La API procesa Json, y he vuelto a leer la documentación y me he encontrado con este apartado a nivel general:

"Limits
Currently we allow 5 concurrent requests."

Y me pone en duda si puedo realizar lo que yo estoy buscando.

En concreto estoy intentando realizar una petición para editar productos.

La idea es mandar el listado de productos y como el campo "id" es un parámetro obligatorio que está esperando la API, sería mandar por ejemplo 7 registros y que permita hacerlo en una sola petición.
  #4 (permalink)  
Antiguo 11/11/2019, 10:51
 
Fecha de Ingreso: abril-2011
Mensajes: 170
Antigüedad: 13 años
Puntos: 68
Respuesta: Hacer en una misma petición varios POST Curl API

Cita:
"Limits
Currently we allow 5 concurrent requests."
Creo que eso se refiere a que no puedes realizar simultáneamente más de 5 peticiones, pero no indica nada acerca de si se pueden editar varios productos con una única petición.

¿Puedes pasar el enlace a la documentación de la API y el nombre del endpoint al que quieres hacer la petición?
  #5 (permalink)  
Antiguo 11/11/2019, 13:38
 
Fecha de Ingreso: junio-2011
Mensajes: 44
Antigüedad: 12 años, 10 meses
Puntos: 2
Respuesta: Hacer en una misma petición varios POST Curl API

Gracias nuevamente,

Si este es el enlace:
https://gps.ifleet.es/api/#method-preset-List

Y concretamente este es el método que quiero hacer:
https://gps.ifleet.es/api/v1/unit/edit.json
  #6 (permalink)  
Antiguo 11/11/2019, 15:06
 
Fecha de Ingreso: abril-2011
Mensajes: 170
Antigüedad: 13 años
Puntos: 68
Respuesta: Hacer en una misma petición varios POST Curl API

Según la documentación que comentas:

https://gps.ifleet.es/api/#group-api...al-description

Cita:
Some actions can take arrays as input parameters. For example, unit/list input parameter unit_id has type "int or int array". This means you can either pass single value:

https://gps.ifleet.es/api/v1/unit/list.json?key=yourapikey&unit_id=14700

Or you can pass multiple values by adding [] to parameter names:

https://gps.ifleet.es/api/v1/unit/list.json?key=yourapikey&unit_id[]=14700&unit_id[]=14701
Es decir, existen algunos métodos (como la funcion de listar), que sí permiten pasar varios identificadores unit_id al mismo tiempo.

Sin embargo, para el método editar (el que comentas) no existe tal funcionalidad:

https://gps.ifleet.es/api/#method-unit-Edit

Si haces click en la pestaña parameters de ese enlace verás que el tipo de dato asignado a "unit_id" es un int, no un array de int. Y en la descripción pone "Unit ID. Optional if VIN is provided". Si admitiera varios a la vez te diría "One or more Unit ID".

Así que me temo que tendrás que enviar una petición por cada registro que quieras editar.

Última edición por prueba230683; 11/11/2019 a las 15:23
  #7 (permalink)  
Antiguo 12/11/2019, 08:09
 
Fecha de Ingreso: junio-2011
Mensajes: 44
Antigüedad: 12 años, 10 meses
Puntos: 2
Respuesta: Hacer en una misma petición varios POST Curl API

Muchas gracias por la ayuda y por las molestias.

Ahora lo veo más claro, no me había fijado en ese detalle.

¿Exististiría alguna otra forma, no sé, a través de cron o programada con tiempo, que vaya mandando cada uno de los registros?

¿Podría guardar los registros en una tabla e irlos mandados uno a uno, aunque la página se refresca cuando termine la petición o es imposible hacerlo así?
  #8 (permalink)  
Antiguo 12/11/2019, 08:44
 
Fecha de Ingreso: abril-2011
Mensajes: 170
Antigüedad: 13 años
Puntos: 68
Respuesta: Hacer en una misma petición varios POST Curl API

Cita:
¿Podría guardar los registros en una tabla e irlos mandados uno a uno, aunque la página se refresca cuando termine la petición o es imposible hacerlo así?
Para los casos en que la petición va a tardar bastante tiempo en ser procesada y temes que el usuario abandone la conexión antes de que termine, puedes utilizar la función ignore_user_abort:

https://www.php.net/manual/es/functi...user-abort.php

Si estableces ignore_user_abort(true), aunque el cliente cierre la conexión con el servidor, el servidor continúa la ejecución del código hasta que éste finalice (siempre y cuando el tiempo de ejecución no pase del máximo establecido por la directiva max_execution_time). También puedes añadir set_time_limit(0) para que no exista un tiempo máximo.

En resumen:

Código PHP:
Ver original
  1. <?php
  2.  
  3. // haces todas las peticiones necesarias
  4.  
  5. ?>

Así no necesitas ni base de datos, ni cron, ni nada.

Última edición por prueba230683; 12/11/2019 a las 08:59
  #9 (permalink)  
Antiguo 13/11/2019, 16:36
 
Fecha de Ingreso: junio-2011
Mensajes: 44
Antigüedad: 12 años, 10 meses
Puntos: 2
Respuesta: Hacer en una misma petición varios POST Curl API

Muchas gracias, voy a probar esa directiva que comentas a ver si me srive.

Etiquetas: api, curl, post
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 18:43.