2012-06-29 21 views
5

Ho trovato questo codice in Internet e l'ho modificato per il mio uso, non sono sicuro di cosa sto facendo qui, sto ricevendo questo errore Errore di ricollegamento: timeout della connessione SSL La parte di accesso ha esito positivo, ma la ricerca non funziona con me. qualcuno mi può aiutare con esso per favore?timeout connessione php ssl

<?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

Ciao Craig, non sei sicuro di come farlo? –

+0

Accanto alla risposta corretta, sotto la valutazione – craig1231

+0

Sulle altre domande, c'è un segno di spunta accanto a tutte le risposte. Controlla quello che ha risolto o aiutato a risolvere il problema. Importa. –

risposta

4

Prova ad aggiungere questo (ma non lasciare questa opzione impostata in produzione!):

curl_setopt($curl_connection, CURLOPT_SSL_VERIFYPEER, false); 

Se funziona dopo, è perché CURL non riesce a negoziare il certificato SSL.

seguire questo tutorial per i passaggi su come ottenere il CERT CA: http://unitstep.net/blog/2009/05/05/using-curl-in-php-to-access-https-ssltls-protected-sites/

Un'altra cosa da guardare è, prima di tua curl_exec(), curl_copy_handle(); e quindi impostare parametri aggiuntivi.

Inoltre, in alternativa, è possibile riavviare cURL con curl_init($url);.

+0

in realtà è falso, l'ho appena controllato. –

+0

hai Wireshark o TCPDUmp? Hai una risposta su 443? O si blocca su TCP SYN? –

+0

Quindi il login funziona, che è il primo curl_exec, ma poi il secondo curl_exec sembra essere bloccato –

0

Utilizzare le 2 opzioni che ho elencato per disabilitare temporaneamente la verifica SSL, che potrebbe essere (se i certificati non sono impostati correttamente). Nota l'opzione "CURLOPT_SSL_VERIFYHOST". Altrimenti mi piacerebbe solo giocare con le opzioni di più. Inoltre non è necessario scorrere questi valori, è sufficiente utilizzare un array associativo.

<?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

Dopo aver provato le altre risposte, ero ancora ottenendo l'errore SSL connection timeout.

ho controllato il mio php.ini e ha deciso di controllare se c'era tutto ciò che riguarda OpenSSL, e ho trovato che:

;extension=php_openssl.dll 

ho permesso che decommentando la linea.

extension=php_openssl.dll 

Ora, con OpenSSL abilitato (questo è il parametro su Windows, che dovrebbe essere simile su Linux/Mac) e dopo aver riavviato il mio server Apache, posso finalmente eseguire la mia richiesta cURL senza alcun errore!