1

J'ai un problème. J'essaie d'obtenir des ressources d'information. Et avant cela, j'ai besoin d'une authentification de base. J'ai trouvé une solution ici, mais ça ne marche pas.Comment file_get_contents from HTTPS avec l'authentification de base?

$username = "username"; 
$password = "password"; 
$url = "https://sapi.website.ru:3443/services/"; 

//GetCountries 
$urlCountries = $url."?action=GetCountries"; 
$remote_url = $urlCountries; 

$opts = array(
    'http' => array(
     'method' => "GET", 
     'header' => "Authorization: Basic ".base64_encode("$username:$password"), 
     'timeout' => 60    
    ) 
); 
$context = stream_context_create($opts); 
$file = file_get_contents($remote_url, false, $context); 

print($file); 

Erreur: failed to open stream: Délai de connexion dépassé dans
J'ai aussi ceci: file_get_contents(): Invalid valeur date.timezone 'Europe/Moskow', nous avons choisi le fuseau horaire 'UTC' pour l'instant - mais ça pourrait marcher avec. Ou pas?

Le problème est peut-être lié à la connexion HTTPS. Soutien où j'ai API, donnez-moi juste url, login et mot de passe. Et ils ont dit: "Vous avez juste besoin d'une authentification de base".

C'est la première fois que j'essaie de travailler avec et il me manque peut-être quelque chose d'important. J'espère que vous pouvez m'aider avec ça.

P.S. Désolé pour mon anglais

UPD J'ai essayé de faire comme ceci:

$headers = array(
    'Content-Type: application/xml', 
    "Authorization: Basic ".base64_encode("$username:$password") 
); 

$process = curl_init($urlCountries); 
curl_setopt($process, CURLOPT_HTTPHEADER, $headers); 
curl_setopt($process, CURLOPT_HEADER, 1); 
curl_setopt($process, CURLOPT_USERPWD, $username . ":" . $password); 
curl_setopt($process, CURLOPT_TIMEOUT, 30); 
curl_setopt($process, CURLOPT_POST, 1); 
curl_setopt($process, CURLOPT_RETURNTRANSFER, TRUE); 
$return = curl_exec($process); 
curl_close($process); 

print_r($return); 

Maintenant, je n'ai pas de messages d'erreur. Mais aussi je n'ai pas de résultats.

+0

J'ai trouvé que les fonctions 'file_get_contents()' et 'stream_' ne sont pas fiables avec' https'. Avez-vous envisagé d'utiliser [curl] (http://stackoverflow.com/questions/2140419/how-do-i-make-a-request-using-http-basic-authentication-with-php-curl)? – GentlemanMax

+0

Je l'ai essayé. UPD ma question. Maintenant, je n'ai aucun message d'erreur. Mais aussi je n'ai pas de résultats. –

Répondre

1

Je l'ai fait. Merci à tous. Certains ports dont j'ai besoin ont été fermés sur mon hébergement. Alors, vérifiez aussi.

$user = 'username'; 
$pass = 'password'; 

    $url = 'url'; 

    $ch = curl_init($url); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); 
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE); 
    curl_setopt($ch, CURLOPT_USERPWD,"$user:$pass"); 
    curl_setopt($ch, CURLOPT_HTTPGET, 1); 

    $exec = curl_exec($ch); 

    curl_close($ch);