Nueva pregunta

Pregunta:

Fecha: 03-10-2019 13:46:35 (En Español)

PHP - ¿Cómo hacer que CURL ejecute desde un Bucle?[No resuelta]

Hola,
Necesito leer un fichero txt para insertar una linea a la vez en Servicio Web remoto.
Yo logro exito solo cuando ejecuto la aplicacion con un solo dato.
Pero se hago la lectura del fichero y intento insertar los datos , no pasa nada.
Gracias por la ayuda.

1 - Ejemplo de la aplicacion funcional solo con un dato.
<?php
set_time_limit(0);

/* API URL */
$url = 'https:..';
$header = array("Authorization: Basic Q09CUkFSUjp2UT..","Content-Type: application/json");

/* Array Parameter Data */
$data = '{"cliente":"8609","acao":"858","motivo":"699","obs":"data-2019-09-20 php"}';

/* Init cURL resource */
$ch = curl_init($url);
/* pass encoded JSON string to the POST fields */
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);

/* set the content type json */
curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
/* set return type json */
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
/* execute request */
 $result = curl_exec($ch);
 echo $result.'<br>';  
/* close cURL resource */
curl_close($ch);
echo 'fim'.'<br>';
?>


2 - Estoy intentando hacer de esta forma
2.1 - Fichero txt
'{"cliente":"8609","acao":"858","motivo":"699","obs":"data-2019-09-20 php"}'
'{"cliente":"8610","acao":"858","motivo":"699","obs":"data-2019-09-20 php"}'

2.2 - Code PHP
<?php
/* Envio de multiplas lineas datos  */

set_time_limit(0);

$dir = 'C:/00cargas'; // directorio para lectura del fichero
$dir2= 'C:/00cargasok/';

$dh = opendir($dir);
$arq = readdir($dh);

  // bucle que para leer todos los ficheros
	while (false != ($arq = readdir($dh))){
	// evalua ficheros
		$exten = substr($arq,strlen($arq)-3,3);
		if ($exten != "" && $exten !="." && strtolower($exten) !="jpg" && strtolower($exten) !="gif" && strtolower($exten) !="bmp"){
		
			$cont_lin=0;
			$linea="";
			$data="";

			/* API URL */
      $url = 'https:...';
      $header = array("Authorization: Basic Q09CUkFSUjp2UThYM....=","Content-Type: application/json");
			
			// abrir fichero
			$arquivo = fopen($dir."/".$arq,"r");

		  // evalua se hay fichero para leer
			if ($arquivo){
				while (!feof ($arquivo)){
					$linea = fgets($arquivo);
          $data =  substr($linea,0,strlen($linea)-2); // quita el '\r\n'

				  /* Init cURL resource */
          $ch = curl_init($url);

    			//curl_setopt($ch, CURLOPT_URL, $url);
					/* pass encoded JSON string to the POST fields */
					curl_setopt($ch, CURLOPT_POSTFIELDS,$data);
					 echo $data.'<br>';
					/* set the content type json */
					curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
					 
					/* set return type json */
					curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
					
					/* execute request */
					 $result = curl_exec($ch);

						if (curl_errno($ch)) {
								echo 'Error: ' . curl_error($ch).'<br>';
						}   
						/* close cURL resource */
						curl_close($ch);
				}
				fclose($arquivo);
	    }// cierra el WHILE $arquivo
	  }// cierra le  WHILE exten
  }// cierra el  WHILE readdir
?>


Etiquetas: cURL - PHP - Pregunta Votos: 1 - Respuestas: 3 - Vistas: 7 Compartir en: Google Facebook Twitter LinkedIn Link
 

Respuestas:

  • Fecha: 05-10-2019 03:19:34 Hola Jose, ante todo bienvenido a la comunidad.

    Te cuento que estuve analizando tu código, aquí una versión un poco más simplificada:

    <?php
    //ver todos los errores
    ini_set('display_errors', '1');
    error_reporting(-1);
    
    /* Envio de multiplas lineas datos  */
    
    set_time_limit(0);
    
    $dir = 'C:/00cargas'; // directorio para lectura del fichero
    $dh = opendir($dir);
    
    // bucle que para leer todos los ficheros
    while (false != ($arq = readdir($dh))) {
        // evalua ficheros
        $exten = substr($arq, strlen($arq) - 3, 3);
        if ($exten != "" && $exten != "." && strtolower($exten) == "txt") {
    
            $linea = "";
            $data = "";
    
            // abrir fichero
            $arquivo = fopen($dir . "/" . $arq, "r");
    
            // evalua se hay fichero para leer
            if ($arquivo) {
                while (!feof($arquivo)) {
                    $linea = fgets($arquivo);
                    $data = substr($linea, 0, strlen($linea) - 2); // quita el '\r\n'
                    
                    echo $data . '<br>';
                    
                    //aquí tu llamada cURL
                    
                }
                fclose($arquivo);
            }// cierra el WHILE $arquivo
        }// cierra le  WHILE exten
    }// cierra el  WHILE readdir
    


    Prueba ejecutarla y verifica si en pantalla obtienes el retorno esperado:
    '{"cliente":"8609","acao":"858","motivo":"699","obs":"data-2019-09-20 php"}'
    '{"cliente":"8610","acao":"858","motivo":"699","obs":"data-2019-09-20 php"}'
    


    Observa que agregue también las siguientes líneas para ver todos los errores (independiente de la configuración del servidor):
    ini_set('display_errors', '1');
    error_reporting(-1);
    


    Finalmente si tu resultado es el esperado, intenta incluir la llamada cURL en cuestión y nos cuentas como te fue.

    Saludos y buen código!
      Votos: 2 - Link respuesta
     
  • Fecha: 05-10-2019 04:12:09 Fernando,
    gracias por contestarme.

    La herramienta Postman exhibe un codigo em PHP para que yo pueda hacer uso.
    Yo no he logrado exito para ponerlo en una sola linea.

    ¿Puedes convertirlo para que yo la utilice?

    Código de la herramienta Postman
    curl -i -X POST \
       -H "Authorization:Basic Q09CU...=" \
       -H "Content-Type:application/json" \
       -d \
    '{
      "cliente":"743697320859348994",
      "acao":"858395203934588928",
      "motivoContato":"690928542932504576",
      "observacao":"data-2019-09-20 teste"
    }' \
     'https://banc.....os.co....s.com.br/api/ass...s/tarefas/manual'
     
      Votos: -1 - Link respuesta
     
  • Fecha: 05-10-2019 12:42:04 Hola Jose, pero según comentabas antes "...Ejemplo de la aplicacion funcional solo con un dato...", este punto ya estaba resuelto, no?

    Si obtienes un resultado con un solo dato (en tu ejemplo inicial), ahí esta tu solución, deberías seguir la línea de tu pregunta original.

    Pudiste hacer la prueba que te comente anteriormente?

    Saludos y buen código!
      Votos: 2 - Link respuesta
     
Para participar activamente de la comunidad primero debes autenticarte, ingresa al sistema.Iniciar Sesión
 
frjcbbae garagebible.com