Saltar al contenido

ERROR DE CURL: falla de recepción: restablecimiento de la conexión por par – PHP Curl

No busques más por todo internet porque has llegado al lugar correcto, poseemos la solución que necesitas sin problema.

Solución:

Introducción

El servidor remoto le ha enviado un paquete RST, lo que indica una interrupción inmediata de la conexión, en lugar del protocolo de enlace habitual.

Posibles Causas

UN. TCP/IP

Puede ser un problema de TCP/IP que debe resolver con su host o actualizar su sistema operativo la mayoría de las veces, la conexión se cierra antes que el servidor remoto antes de que termine de descargar el contenido resultante. Connection reset by peer…..

B. Error de canal

Tenga en cuenta que hay algunos problemas con el escalado de ventanas de TCP en algunos kernels de Linux después de v2.6.17. Consulte los siguientes informes de errores para obtener más información:

https://bugs.launchpad.net/ubuntu/+source/linux-source-2.6.17/+bug/59331

https://bugs.launchpad.net/ubuntu/+source/linux-source-2.6.20/+bug/89160

C. Error de PHP y CURL

Tu estas usando PHP/5.3.3 que también tiene algunos errores serios… te aconsejo que trabajes con una versión más reciente de PHP y CURL

https://bugs.php.net/bug.php?id=52828

https://bugs.php.net/bug.php?id=52827

https://bugs.php.net/bug.php?id=52202

https://bugs.php.net/bug.php?id=50410

D. Unidad máxima de transmisión

Una causa común de este error es que el tamaño MTU (Unidad máxima de transmisión) de los paquetes que viajan a través de su conexión de red se ha cambiado del valor predeterminado de 1500 bytes. Si ha configurado VPN esto probablemente debe cambiar durante la configuración

D. Cortafuegos: iptables

Si no sabe cómo evitar a estos tipos, podrían causar algunos problemas graves. Intente acceder al servidor al que se está conectando para verificar lo siguiente.

  • Tiene acceso al puerto 80 en ese servidor

Ejemplo

 -A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT`
  • Lo siguiente está en la última línea, no antes de ningún otro ACEPTAR

Ejemplo

  -A RH-Firewall-1-INPUT -j REJECT --reject-with icmp-host-prohibited 
  • Verifique ALL DROP, REJECT y asegúrese de que no estén bloqueando su conexión

  • Permitir temporalmente todas las conexiones para ver si los enemigos atraviesan

Experimentar

Pruebe con un servidor diferente o un servidor remoto (tantas tarifas de alojamiento en la nube en línea) y pruebe el mismo script… si funciona, supongo que es tan bueno como true … You need to update your system

Otros relacionados con el código

UN. SSL

Si Yii::app()->params['pdfUrl'] es una url con https no incluir la configuración SSL adecuada también puede causar este error en la versión anterior de curl

Resolución: asegúrese de que OpenSSL esté instalado y habilitado, luego agregue esto a su código

curl_setopt($c, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($c, CURLOPT_SSL_VERIFYHOST, false);

Espero que ayude

Normalmente, este error significa que se estableció una conexión con un servidor, pero el servidor remoto cerró esa conexión. Esto podría deberse a un servidor lento, un problema con el servidor remoto, un problema de red o (tal vez) algún tipo de error de seguridad con los datos que se envían al servidor remoto, pero me parece poco probable.

Normalmente, un error de red se resolverá solo con un poco de tiempo, pero parece que ya le ha dado un poco de tiempo.

cURL a veces tiene problemas con SSL y certificados SSL. Creo que su Apache y/o PHP se compilaron con una versión reciente de las bibliotecas cURL y cURL SSL, además no creo que OpenSSL se haya instalado en su servidor web.

Aunque no puedo estar seguro Sin embargo, creo que cURL ha sido históricamente inestable con los certificados SSL, mientras que Open SSL no.

De todos modos, intente instalar Open SSL en el servidor e intente nuevamente y eso debería ayudarlo a deshacerse de este error.

Entonces, ¿cuál es la URL que Yii::app()->params['pdfUrl'] ¿da? Usted dice que debería ser https, pero el registro muestra que se está conectando en el puerto 80… en el que casi ningún servidor está configurado para aceptar conexiones https. cURL es lo suficientemente inteligente como para saber que https debería estar en el puerto 443… lo que sugeriría que su URL tiene algo extraño como: https://196.41.139.168:80/serve/?r=pdf/generatePdf

Eso hará que la conexión finalice, cuando Apache en el otro extremo no pueda establecer una comunicación https con usted en ese puerto.

Te das cuenta de tu primera $body la definición se reemplaza cuando estableces $body a una array ¿Dos líneas después? Probablemente solo sea un artefacto de usted tratando de resolver el problema Tampoco está codificando el client_url y client_id valores (¡el primero posiblemente contenga caracteres que necesitan escaparse!) Ah, y usted está agregando a $body_str sin antes inicializarlo.

Desde su salida detallada podemos ver que cURL está agregando un content-length encabezado, pero… ¿es correcto? Puedo ver algunos comentarios en Internet de que ese número es incorrecto (especialmente con versiones anteriores) … si ese número fuera demasiado pequeño (por ejemplo), obtendría un restablecimiento de conexión antes de que se envíen todos los datos. Puede insertar manualmente el encabezado:

curl_setopt ($c, CURLOPT_HTTPHEADER, 
   array("Content-Length: ". strlen($body_str))); 

Ah, y hay una función útil http_build_query eso convertirá un array de pares de nombre/valor en una URL codificada string para ti.

Todo esto se acumula en el código final:

$post=http_build_query(array(
  "client_url"=>Yii::app()->params['pdfClientURL'],
  "client_id"=>Yii::app()->params['pdfClientID'],
  "title"=>$title,
  "content"=>$content));

//Open to URL
$c=curl_init(Yii::app()->params['pdfUrl']);
//Send post
curl_setopt ($c, CURLOPT_POST, true);
//Optional: [try with/without]
curl_setopt ($c, CURLOPT_HTTPHEADER, array("Content-Length: ".strlen($post))); 
curl_setopt ($c, CURLOPT_POSTFIELDS, $post);
curl_setopt ($c, CURLOPT_RETURNTRANSFER, true);
curl_setopt ($c, CURLOPT_CONNECTTIMEOUT , 0);
curl_setopt ($c, CURLOPT_TIMEOUT  , 20);
//Collect result
$pdf = curl_exec ($c);
$curlInfo = curl_getinfo($c);
curl_close($c);

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *