2013-03-05 18 views
29

Con PHP & arricciatura, ho bisogno di connettermi tramite un proxy a un sito protetto SSL e, ignorare gli avvisi del certificato. La riga di comando del ricciolo appare così:php curl -k o --insecure, -X

curl -k -u username:password -X GET https://someURL 

Guardando attraverso curl.php, vedo quali sono le opzioni corrette da impostare. Con loro, finisco con qualcosa del genere:

$ch = curl_init("https://someURL"); 
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); // Ignore cert errors? 
    curl_setopt($ch, CURLOPT_PROXY, true);   // Proxy true? 
    curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "GET");  
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);    
    curl_setopt($ch, CURLOPT_USERPWD, "username:password");  
    $result = curl_exec($ch); 

Ma, $ result restituisce sempre false. La mia password ha un carattere speciale, "!". Forse ho bisogno di fuggire? A parte questo, qualche altra idea?

risposta

51

Per disabilitare completamente il controllo del certificato ssl, arricciare l'opzione CURLOPT_SSL_VERIFYPEER. Se è impostato su false, la verifica della certificazione sarà disattivata. Poiché il valore di default è true, dovrete aggiungere:

curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); 

Dal PHP documentation:

CURLOPT_SSL_VERIFYPEER FALSE per fermare CURL dal verificare i certificati dei peer. È possibile specificare certificati alternativi da verificare con l'opzione CURLOPT_CAINFO oppure è possibile specificare una directory dei certificati con l'opzione CURLOPT_CAPATH. TRUE per impostazione predefinita a partire da cURL 7.10. Bundle predefinito installato da cURL 7.10.

Si noti che se il controllo del certificato è disabilitato è possibile omettere l'impostazione CURLOPT_SSL_VERIFYHOST. Così la seguente riga può essere rimosso:

curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); 

È inoltre chiesto se la seguente impostazione è ok:

curl_setopt($ch, CURLOPT_PROXY, true); 

Dal PHP documentation: procura

Il HTTP al tunnel richieste attraverso.

Significa che accetta un indirizzo proxy come "192.168.0.1:3128" se si utilizza un proxy. true non è significativo in questo caso

+0

@DanielStenberg Sì, questo è giusto. La parte relativa al proxy del mio post è la seguente: '// Proxy true?'. (Guarda di nuovo la domanda) – hek2mgl

+0

Ah davvero, grazie. Sono stato confuso dalla risposta e non correlato correttamente con la Q. Forse può essere in qualche modo chiarito nella risposta per rendere più difficile per gli sciocchi come me fare la conclusione sbagliata ... –

+0

@DanielStenberg Modificato la risposta – hek2mgl