2010-02-21 20 views

risposta

4

L'invio di una richiesta tramite arricciatura a un URL HTTPS non è così difficile da solo, in termini di codice PHP.

Qualcosa del genere dovrebbe fare perfettamente bene (Ho appena provato questa porzione di codice sulla mia macchina, Windows, PHP 5.3):

$url = 'https://.../...'; 

$ch = curl_init(); 
curl_setopt($ch, CURLOPT_URL, $url); 
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); 
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2); 
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); 
curl_setopt($ch, CURLOPT_HEADER, 0); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
$data = curl_exec($ch); 
curl_close($ch); 

echo $data; 

Ed emette il risultato bene: la stessa cosa ottengo nel mio browser quando provo ad accedere all'URL https://; ad eccezione del CSS, ovviamente.


Si potrebbe desiderare di dare un'occhiata alla pagina di manuale della funzione curl_setopt: ci sono un sacco di opzioni, e alcuni di quelli potrebbe essere utile, nel vostro caso specifico :-)

Qui, Ho usato CURLOPT_SSL_VERIFYPEER e CURLOPT_SSL_VERIFYHOST; non sono sicuro che avrai bisogno di quelli con Amazon, ma dovevo usarli, altrimenti questa porzione di codice non funzionava, ma ciò potrebbe essere correlato al fatto che il certificato che sto usando è autofirmato ... Prova con e senza quelli, e scoprirai velocemente se ne hai bisogno.

+0

url http: // ...? – Sarfraz

+0

@Sarfraz> ergh, damn copia-incolla * (Ho copiato un URL dal mio browser, senza accorgertene non ha aggiunto i "come" al mio server precedente) * ;; Ho modificato la mia risposta per correggerla ;; grazie per il commento :-) –

+0

siete i benvenuti :) – Sarfraz

12

Esempio:

$url = "https://example.com"; 
$ch = curl_init(); 
curl_setopt($ch, CURLOPT_URL, $url); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 

curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); 
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2); 

$result = curl_exec($ch); 
curl_close($ch); 

print_r($result); 

CURLOPT_SSL_VERIFYPEER

Verificare se il certificato pari è valido o non valido/scaduto.

CURLOPT_SSL_VERIFYHOST citando php manual:

1 per verificare l'esistenza di un nome comune nel certificato SSL peer. Da 2 a verificare l'esistenza di un nome comune e verificare che corrisponda al nome host fornito.

+0

Puoi descrivere perché sono richiesti SSL_VERIFYPEER e SSL_VERIFYHOST? –

+0

Ho modificato la mia risposta. – rogeriopvl

2

Se si desidera configurare CURL per accettare ciecamente il certificato, è possibile impostare l'opzione CURLOPT_SSL_VERIFYPEER su false.

$url = 'https://www.example.com/abc'; 

$ch = curl_init(); 
curl_setopt($ch, CURLOPT_URL, $url); 

curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 

// Blindly accept the certificate 
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); 

$response = curl_exec($ch); 
curl_close($ch); 

var_dump($response); 
1

Si può anche utilizzare Zend Framework e l'adattatore cURL per aiutare con questa attività. Dettagli here