2012-06-29 11 views
5

Encontré este código en internet y lo modifiqué para mi uso, no estoy seguro de lo que estoy haciendo mal aquí, me sale este error Error de curl: tiempo de espera de conexión SSL La parte de inicio de sesión es exitosa, pero la búsqueda no funciona conmigo. ¿Alguien puede ayudarme con eso por favor?curl php ssl tiempo de espera de conexión

<?php 
//create array of data to be posted 
$post_data['username'] = 'user'; 
$post_data['password'] = 'log'; 
$post_data['cmd'] = 'log'; 

//create array of data to be posted 
foreach ($post_data as $key => $value) { 
    $post_items[] = $key . '=' . $value; 
} 
//create the final string to be posted using implode() 
$post_string = implode ('&', $post_items); 
//create cURL connection 
$curl_connection = 
    curl_init('https://sie.com'); 
//set options 
///curl_setopt($curl_connection, CURLOPT_CONNECTTIMEOUT, 3990); 

curl_setopt($curl_connection, CURLOPT_USERAGENT, 
    "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)"); 

curl_setopt($curl_connection, CURLOPT_HTTPHEADER, array(
    'Connection: Keep-Alive', 
    'Keep-Alive: 300' 
)); 

curl_setopt($curl_connection, CURLOPT_RETURNTRANSFER, true); 
curl_setopt($curl_connection, CURLOPT_SSL_VERIFYPEER, false); 
curl_setopt($curl_connection, CURLOPT_FOLLOWLOCATION, 1); 
//set data to be posted 
curl_setopt($curl_connection, CURLOPT_POSTFIELDS, $post_string); 
//perform our request 
$result = curl_exec($curl_connection); 
//show information regarding the request 

//print_r(curl_getinfo($curl_connection)); 
//echo curl_errno($curl_connection) . '-' . 
    //    curl_error($curl_connection); 
//close the connection 
//curl_close($curl_connection); 


echo $result."\n"; 


$post_data1['cmd'] = 'Viewr'; 
$post_data1['search'] = 'test'; 



foreach ($post_data1 as $key => $value1) { 
    $post_items1[] = $key . '=' . $value1; 
} 
$post_string1 = implode ('&', $post_items1); 
echo $post_string1."\n"; 
curl_setopt($curl_connection, CURLOPT_CONNECTTIMEOUT, 30); 
curl_setopt($curl_connection, CURLOPT_USERAGENT, 
    "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)"); 
curl_setopt($curl_connection, CURLOPT_RETURNTRANSFER, true); 
curl_setopt($curl_connection, CURLOPT_SSL_VERIFYPEER, false); 
curl_setopt($curl_connection, CURLOPT_FOLLOWLOCATION, 1); 
//set data to be posted 
curl_setopt($curl_connection, CURLOPT_POSTFIELDS, $post_string); 
//perform our request 
$result1 = curl_exec($curl_connection); 
//show information regarding the request 
//$result1 =1; 
//close the connection 
//curl_close($curl_connection); 
if ($result1) 
echo "ok \n\n"; 
else 
echo "nok\n"; 
if(curl_errno($curl_connection)) 
{ 
    echo 'Curl error: ' . curl_error($curl_connection)."\n"; 
} 
echo($post_string1); 
echo $result1."\n"; 


curl_close($curl_connection); 


?> 
+0

Hola Craig, ¿No estás seguro de cómo hacerlo? –

+0

Junto a la respuesta correcta, debajo de la calificación – craig1231

+0

En sus otras preguntas, hay una marca de verificación al lado de todas las respuestas. Marque el que lo resolvió o ayudó a resolver el problema. Importa. –

Respuesta

4

Trate de añadir este (Pero no dejar esta opción en la producción!):

curl_setopt($curl_connection, CURLOPT_SSL_VERIFYPEER, false); 

Si funciona después, es porque está fallando CURL para negociar el certificado SSL.

seguir este tutorial para los pasos a seguir para obtener el certificado CA: http://unitstep.net/blog/2009/05/05/using-curl-in-php-to-access-https-ssltls-protected-sites/

Otra cosa a mirar es, antes su curl_exec(), curl_copy_handle(); y después fijar los parámetros adicionales. También puede reiniciar cURL con curl_init($url);.

+0

está configurado como falso en realidad, acabo de comprobarlo. –

+0

¿tiene Wireshark o TCPDUmp? ¿Recibes una respuesta en 443? ¿O se bloquea en el TCP SYN? –

+0

Por lo tanto, el inicio de sesión funciona, que es el primer curl_exec, pero luego el segundo curl_exec parece estar atascado. –

0

Use las 2 opciones que enumeré para deshabilitar la verificación SSL temporalmente, que podría (si los certs no están configurados correctamente). Tenga en cuenta la opción "CURLOPT_SSL_VERIFYHOST". De lo contrario, solo jugaría con las opciones más. Además, no es necesario recorrer esos valores, solo puede usar una matriz asociativa.

<?php 
//create array of data to be posted 
$post_data['username'] = 'user'; 
$post_data['password'] = 'log'; 
$post_data['cmd'] = 'log'; 

//create cURL connection 
$curl_connection = curl_init(); 
//set options 
curl_setopt($curl_connection,CURLOPT_SSL_VERIFYHOST,0); 
curl_setopt($curl_connection,CURLOPT_SSL_VERIFYPEER, false); 

// ...

curl_setopt($curl_connection, CURLOPT_POSTFIELDS, $post_data);//it can accept associative arrays 

// ...

?> 
0

Después de probar las otras respuestas, todavía estaba consiguiendo el error SSL connection timeout.

me registré mi php.ini y decidió comprobar si había algo relacionado con OpenSSL, y encontraron que:

;extension=php_openssl.dll 

que le permitió eliminando el comentario de la línea.

extension=php_openssl.dll 

Ahora, con OpenSSL habilitado (éste es el parámetro en Windows, que debe ser similar en Linux/Mac) y después de reiniciar mi servidor Apache, que finalmente puede ejecutar mi solicitud cURL sin ningún error!

Cuestiones relacionadas