#!/usr/bin/php /dev/null &" ); * sh script.php --user=nobody --password=secret -p --access="host=127.0.0.1 port=456" * * EJEMPLO REAL * php /home/cesar/Desarrollos/php/laravel/app/Scripts/Requester --type=json --sleep=3 --content='{"dominio":"https://dev.concredito.com.mx/","metodo":"GET","endpoint":"transferencias-inmediatas/spei/62/status"}' $> /dev/null & * */ /** * Ejecución del código del Script */ try { $response = sendRequest( obtenerParametros( $argv ) ); } catch (Exception $e) { response( $e->getMessage() ); } /** * FUNCIONES, NO MOVER NADA AL MENOS QUE SEPAS LO QUE ESTAS HACIENDO */ function sendRequest( $parametros ) { error_log("\nREQUESTER\n".json_encode( $parametros ) ); if ( $validateFields = isMissingFields( $parametros, [ 'dominio','metodo','endpoint' ] ) ) { setError( 'MISSING_FIELDS', [ 'fields' => $validateFields ] ); } $paramsGET = ''; $paramsPOST = ''; if ( !empty( $parametros['campos'] ) ) { switch ( $parametros['metodo'] ) { case 'GET': $paramsGET = prepareParamsToGet( $parametros['campos'] ); $paramsPOST = ''; break; case 'POST': case 'PUT': case 'DELETE': $paramsGET = ''; $paramsPOST = $parametros['campos']; break; } } $opciones = [ CURLOPT_URL => $parametros['dominio'].$parametros['endpoint'].$paramsGET, CURLOPT_CUSTOMREQUEST => $parametros['metodo'], CURLOPT_POSTFIELDS => $paramsPOST, CURLOPT_TIMEOUT => 0 ]; $defaults = [ CURLOPT_HEADER => false, CURLOPT_RETURNTRANSFER => true, CURLOPT_TIMEOUT => 2, CURLOPT_SSL_VERIFYHOST => false, CURLOPT_SSL_VERIFYPEER => false, CURLOPT_USERAGENT => 'El API misma xD' ]; $ch = curl_init(); curl_setopt_array( $ch, ( $opciones + $defaults ) ); if ( !$result = curl_exec( $ch ) ) { setError( "Ocurrio un error al enviar la petición (".curl_errno( $ch ).") ".curl_error( $ch ) ); }; return $result; } function prepareParamsToGet( $parametros ) { $paramsGET = ''; foreach( $parametros AS $k => $v ) { if ( $paramsGET == '') { $paramsGET = "?{$k}={$v}"; } else { $paramsGET .= "&{$k}={$v}"; } } return $paramsGET; } function obtenerParametros( $argv ) { $parametros = arguments( $argv ); $parametros['type'] = ( isset( $parametros['type'] ) ? $parametros['type'] : 'json' ); $parametros['sleep'] = ( isset( $parametros['sleep'] ) ? (int) $parametros['sleep'] : 0 ); $parametros['content'] = ( isset( $parametros['content'] ) ? $parametros['content'] : '' ); $parametros['campos'] = ( isset( $parametros['campos'] ) ? $parametros['campos'] : '' ); if ( $parametros['sleep'] > 0 ) { sleep( $parametros['sleep'] ); } if ( empty( $parametros['content'] ) ) { setError( "El parametro '--content' no se ha definido" ); } switch ( $parametros['type'] ) { case 'json': $parametros['content'] = json_decode( $parametros['content'], true ); $parametros['content']['campos'] = json_decode( $parametros['campos'], true ); break; default: setError( "El parametro '--type' es incorrecto" ); break; } return $parametros['content']; } function arguments( $argv ) { $_ARG = []; foreach ( $argv as $arg ) { if ( preg_match( '/--([^=]+)=(.*)/', $arg, $reg ) ) { $_ARG[ $reg[1] ] = $reg[2]; } elseif ( preg_match( '/-([a-zA-Z0-9])/', $arg, $reg ) ) { $_ARG[ $reg[1] ] = 'true'; } } return $_ARG; } function isMissingFields( $fields, $requiredFields ) { $missingFields = []; // Check for missing fields, or fields being empty. foreach ( $requiredFields as $field ) { if ( !isset( $fields[ $field ] ) ) { $missingFields[] = $field; } } // If any fields were missing, inform the client if ( !empty( $missingFields ) ) { return $missingFields; } return false; } function response( $response ) { die( json_encode( $response, true )."\n" ); } function setError( $mensaje, $extraInfo = [] ) { $response = [ 'status' => 'error', 'message' => $mensaje ]; if ( !empty( $extraInfo ) ) { $response = array_merge( $extraInfo, $response ); } return response( $response ); } echo "\n"; ?>