PHP - Curl en php - Error 500

 
Vista:
sin imagen de perfil

Curl en php - Error 500

Publicado por Luis (7 intervenciones) el 23/04/2019 06:23:31
Saludos!

Tengo un código fuente que he estoy probando para lograr acceso al Sistema de impuestos de Chile con Curl en php, pero no logro que funcione, pues siempre me arroja el error 500.

El formulario de acceso está en la siguiente URL. https://zeusr.sii.cl//AUT2000/InicioAutenticacion/IngresoRutClave.html

El curl debería enviar la contraseña y el usuario (rut) como POST al action https://zeusr.sii.cl/cgi_AUT2000/CAutInicio.cgi

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
<?php
 
    $ch = curl_init();
    $cookie = "cookies.txt";
    $userAgent = 'Mozilla/5.0 (Windows NT 5.1; rv:31.0) Gecko/20100101 Firefox/31.0';
    $url = 'https://zeusr.sii.cl/cgi_AUT2000/CAutInicio.cgi';
    $post_data = array(
        'rutcntr' => '11.111.111-K',
        'password' => 'AAAA',
        'clave'    => 'AAAA',
        'rut'      => '11111111',
        'referencia' => 'http://www.sii.cl',
        'dv'         => 'K'
    );
 
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_POST, TRUE);   //is it optional?
    curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data);
    curl_setopt($ch, CURLOPT_USERAGENT,$userAgent);
    curl_setopt($ch, CURLOPT_COOKIE,$cookie);
    curl_setopt($ch, CURLOPT_COOKIEJAR,$cookie);
    curl_setopt($ch, CURLOPT_COOKIEFILE,$cookie);
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION,1);
    curl_setopt($ch, CURLOPT_HEADER,1);
    curl_setopt($ch, CURLOPT_TIMEOUT,-1);
     curl_setopt($ch, CURLOPT_HTTPHEADER, array( 'Content-type: text/html; charset=utf-8' ));
    curl_setopt($ch, CURLOPT_REFERER, 'https://zeusr.sii.cl//AUT2000/InicioAutenticacion/IngresoRutClave.html');
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true);
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2);
    curl_setopt($ch, CURLOPT_CAINFO, getcwd() . "/cert/DigiCertHighAssuranceEVRootCA.crt");
    $result  = curl_exec($ch);
    $err     = curl_error($ch);
    curl_close($ch);
    if ($err)
     {
        echo "cURL Error #:" . $err;
     }
    else
     {
        echo "<pre>";
        print_r($result);
        echo "</pre>";
     }
?>



El resultado que muestra es el siguiente:

HTTP/1.1 500 Internal Server Error
Date: Tue, 23 Apr 2019 03:43:42 GMT
Server: Apache
X-Frame-Options: SAMEORIGIN
Content-Security-Policy: default-src https: data: 'unsafe-inline' 'unsafe-eval'
Strict-Transport-Security: max-age=31536000; includeSubDomains
X-Content-Type-Options: nosniff
Vary: Accept-Encoding
Content-Length: 9
Connection: close
Content-Type: text/html; charset=iso-8859-1

Error 500

Agradecería me dieran una mano porque llevo días atorado con esto.

Saludos
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de joel
Val: 1.254
Plata
Ha aumentado 1 puesto en PHP (en relación al último mes)
Gráfica de PHP

Curl en php - Error 500

Publicado por joel (340 intervenciones) el 23/04/2019 10:57:21
Hola Luis, revisa el log del servidor web, ahí veras porque se genera el error 500!!!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Curl en php - Error 500

Publicado por Luis (7 intervenciones) el 23/04/2019 14:20:33
Gracias Joel,

ya revisé y tanto en el archivo error_log como en el log de errores del Cpanel solo aparecen unos errores de sintaxis que cometí días atrás cuando estaba creando el script. Nada reciente y nada relacionado al error 500 que da ahora.

¿Tienes alguna otra idea que me ayude a resolver el misterio?

Saludos y gracias,
Luis
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Mauro
Val: 1.618
Plata
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

Curl en php - Error 500

Publicado por Mauro (449 intervenciones) el 23/04/2019 14:39:08
¿Tienes forma de probar el script en algún otro servidor? (En tu local por ejemplo). Eso te podrá dar una mejor idea de qué es lo que está fallando (Tal vez la configuración de tu servidor está ocultando los errores o algo así).

En general igual te recomendaría que no uses cURL para algo tan complejo como esto... probablemente Guzzle te iría mejor.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Curl en php - Error 500

Publicado por Luis (7 intervenciones) el 23/04/2019 14:49:40
Gracias Mauro, lo estoy probando en mi servidor compartido, pues finalmente es allí donde debería funcionar.

Tengo otros scripts que usan curl y navegan complejas estructuras para extracción de data y funcionan muy bien. Estoy leyendo la documentación de Guzzle, sin embargo no considero usarlo en esta ocasión porque me toparía con otros problemas desconocidos. Siento que a este script que usa Curl está muy cerca de funcionar.

Gracias
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Mauro
Val: 1.618
Plata
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

Curl en php - Error 500

Publicado por Mauro (449 intervenciones) el 23/04/2019 18:03:43
Ok, suena bien lo que decís de Guzzle... tal vez para la próxima :)

Lo que yo decía sobre probar en otro servidor es para ver si el problema está de tu lado o del otro...

Recién intenté probar tu script y me dio este mensaje:

1
2
3
cURL Error #:error setting certificate verify locations:
  CAfile: /home/mauro/Dropbox/Work/Leeway/Academy/Tests/chile/cert/DigiCertHighAssuranceEVRootCA.crt
  CApath: /etc/ssl/certs

Imagino que en tu servidor sí existe el archivo .crt :p

Lo que no me queda claro es si el problema te lo da tu servidor o al que te estás queriendo conectar... En todo caso, si no hay posibilidad de probar en un ambiente local, lo único que puedes hacer es ir comentando/descomentando de a una línea hasta encontrar cuál es la problemática específicamente y desde ahí continuar resolviendo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Curl en php - Error 500

Publicado por Luis (7 intervenciones) el 23/04/2019 18:52:53
Gracias Mauro,

El error me lo arroja el servidor al que quiero conectarme, porque lo muestra en el print_r($result); (es decir, si comento esta línea me muestra una página en blanco).

Hay algo extraño es que en la siguiente sección de código, no entra por el if, sino por el else. Es decir, no hay un error de Curl, sino un error en la solicitud y la respuesta del servidor es 500.


1
2
3
4
5
6
7
8
9
10
11
$err     = curl_error($ch);
     if ($err)
     {
        echo "cURL Error #:" . $err;
     }
    else
     {
        echo "<pre>";
        print_r($result);
        echo "</pre>";
     }

Imaginemos que tenemos un formulario de login sin validación e introducimos datos que no pueden ser procesados por el servidor o dejamos datos en blanco, etc. ¿me explico? Es lo que parece estár pasando.

Los datos enviados en el array $post_data están incompletos o incorrectos. Creo que por allí va la cosa. ¿de donde saqué estos datos? Mirando el código fuente del formulario https://zeusr.sii.cl//AUT2000/InicioAutenticacion/IngresoRutClave.html puedo ver que los datos que solicita son los que se indican en la variabe $post_data, pero es posible que haya omitido algo.

pregunto ¿existirá alguna forma de analizar un formulario remoto y determinar exactamente los valores que debemos enviar o que estamos enviando?

Revisando el formulario pude determinar los siguientes valores

1
2
3
4
5
6
7
$post_data = array(
        'rutcntr' => '11.111.111-K',
        'password' => 'AAAA',
        'clave'    => 'AAAA',
        'rut'      => '11111111',
        'referencia' => 'http://www.sii.cl',
        'dv'         => 'K');

NOTA: En el formulario se completan los datos rutcntr y password, sin embargo, por lo que pude ver, un javascript toma el rutcntr y genera los datos rut y dv. (separa 11.111.111-K en 11111111 y K)

Si logras ver algo que yo no veo te estaré agradecido

Saludos y gracias!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Mauro
Val: 1.618
Plata
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

Curl en php - Error 500

Publicado por Mauro (449 intervenciones) el 23/04/2019 20:08:41
Ok, bueno... es un avance :)

Al menos sabemos que el problema está del lado del receptor y no en tu script.

No sé si hay una forma fácil de hacer lo que estás diciendo... lo que yo intentaría sería hacer un request "a mano" (A través de un navegador, como si fuera un usuario real) e ir analizando vía consola de debugging del navegador qué va y qué viene.

Puede que haya algún campo oculto, algún header o alguna otra de esas cosas que a simple vista no se ven pero que haga la diferencia entre un request exitoso y uno que no lo es... me pasó algo así hace un tiempo y escribí esto.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Curl en php - Error 500

Publicado por Luis (7 intervenciones) el 24/04/2019 00:30:20
Buen artículo el que me envías. En algo similar ando yo "removiendo la maleza".

Te comento que usando el inspector de elementos de Chrome, pude determinar las variables que se envían en el formulario y estaban todas correctas, salvo el campo "referencia" cuyo valor es https://misiir.sii.cl/cgi_misii/siihome.cgi y no http://www.sii.cl como estaba. Hice el cambio y desafortunadamente el error 500 persiste.

Luego analicé otros datos, especialmente en la sección del header. Estoy asumiendo que los "headers" que se requieren deben enviarse en un array, por lo que todos y cada uno de los que el inspector de código de chrome me indicó, los incluí, así:

1
2
3
4
5
6
7
8
9
10
11
12
13
$header = array(
    'Content-type: application/x-www-form-urlencoded',
    'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3', 
    'Accept-Encoding: gzip, deflate, br', 'Accept-Language: es-419,es;q=0.9,en;q=0.8',
    'Cache-Control: max-age=0',
    'Connection: keep-alive',
    'Content-Length: 114',
    'Cookie: s_cc=true',
    'Host: zeusr.sii.cl',
    'Origin: https://zeusr.sii.cl',
    'Referer: https://zeusr.sii.cl//AUT2000/InicioAutenticacion/IngresoRutClave.html?https://misiir.sii.cl/cgi_misii/siihome.cgi',
    'Upgrade-Insecure-Requests: 1',
    'User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.103 Safari/537.36' );

Luego el array se incluye en CURLOPT_HTTPHEADER, así

1
curl_setopt($ch, CURLOPT_HTTPHEADER, $header);

El error 500 ya parece una pegatina en mi pantalla. No logro quitarlo por nada.

Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Mauro
Val: 1.618
Plata
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

Curl en php - Error 500

Publicado por Mauro (449 intervenciones) el 24/04/2019 17:06:27
Puff... qué molestia :p

Lo único que se me ocurre recomendarte es intentar el cURL vía línea de comandos, darle duro hasta que te de 200 OK y a partir de ahí modificar el PHP... o, si es posible, pedir ayuda a la gente que da soporte al sitio donde estás consultando.

Suerte!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de italo_pm
Val: 997
Bronce
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

Curl en php - Error 500

Publicado por italo_pm (144 intervenciones) el 24/04/2019 20:20:23
hola

al parecer el problema que indicas (en el primer post) es de login/acceso

aqui alguien tuvo el problema de login y le indique como resolverlo.

con curl, el user y la password se envian con CURLOPT_USERPWD, por comodidad declaras las variables $username y $password fuera del curl_init() y luego se las pasas al CURLOPT_USERPWD


https://www.lawebdelprogramador.com/foros/PHP/1691243-PHP-CURL-y-Ventana-Emergente-Login-CGI.html#i1691321

prueba

salud2
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Curl en php - Error 500

Publicado por Luis (7 intervenciones) el 25/04/2019 00:09:22
Gracias por tu tiempo Mauro, tengo un hosting compartido y no puedo usar SSH. Tampoco puedo contactar a la gente de soporte del sitio a consultar porque la intención es hacer un scrapping y no creo que les guste ja ja ...seguiré probando
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Curl en php - Error 500

Publicado por Luis (7 intervenciones) el 25/04/2019 00:11:50
Gracias Italo,

Intenté lo que dices y desafortunadamente no funcionó. Ya estoy a punto de tirar la toalla y declararme incompetente :-/

Saludos,
Luis
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Mauro
Val: 1.618
Plata
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

Curl en php - Error 500

Publicado por Mauro (449 intervenciones) el 25/04/2019 19:45:04
jajaja, pues hubises empezado por ahí! :)

Si de WebScrapping se trata no lo dudes... usá Panther de Symfony (o al menos Goutte y DomCrawler)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar