2017-10-13 43 views
0

J'ai essayé et recherché très dur mais je n'ai pas trouvé de réponse.cURL to PHP avec en-tête et nom d'utilisateur mais sans mot de passe

Je me suis cURL suivante:

curl "https://someurl" -H "client-id: Fsomemorecharacters8=" -u "8somemorecharacters0:" 

test dans un shell de commande fonctionne parfaitement. Mais comment puis-je le faire fonctionner avec PHP? Habituellement son "nom d'utilisateur: mot de passe" mais j'ai "nom d'utilisateur:" qui est étrange.

code PHP Mon jusqu'à présent:

<?php 
    $ch = curl_init(); 
    $url = 'https://someurl'; 

    curl_setopt($ch, CURLOPT_URL, $url); 
    curl_setopt($ch, CURLOPT_HEADER, array('client-id: FHP20c+somemorecharacters8=')); 
    curl_setopt($ch, CURLOPT_USERPWD, '85a15somemorecharacters4550:'); //Issue is here i think 

    $output = curl_exec($ch); 

    curl_close($ch); 
?> 

Avez-vous une idée de comment le faire fonctionner donné -u « nom d'utilisateur: » au lieu de -u « nom d'utilisateur: Mot de passe »?

Cordialement

MISE À JOUR
Voir ci-dessous pour la réponse!

+1

est l'espace à la fin de ' '85a15somemorecharacters4550:'' une faute de frappe? Cela va envoyer un seul espace comme mot de passe. – iainn

+0

merci pour votre réponse @iainn. Désolé, c'était une faute de frappe. J'ai édité mon post en conséquence. – TrojanRabbit

Répondre

0

J'ai donc été capable de le résoudre après tout.

  1. Merci à print curl_error($ch); juste après $output = curl_exec($ch); j'ai découvert qu'il ya un « problème de certificat SSL: certificat auto-signé dans la chaîne de certificat ».
  2. J'ai donc eu besoin de télécharger le certificat et de l'inclure dans la demande comme suit: curl_setopt ($ch, CURLOPT_CAINFO, dirname(__FILE__)."/cacert-2017-09-20.pem"); Ou vous pouvez utiliser curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); qui, cependant, n'est pas recommandé.
  3. Merci à l'écho $status_code = curl_getinfo($ch, CURLINFO_HTTP_CODE); j'ai découvert que mes en-têtes manquaient. Je dois utiliser CURLOPT_HTTPHEADER au lieu de CURLOPT_HEADER.

Alors voici mon code complet:

<?php 

    $ch = curl_init(); 
    $url = 'https://someurl'; 

    curl_setopt($ch, CURLOPT_URL, $url); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
    curl_setopt($ch, CURLOPT_CAINFO, dirname(__FILE__)."/cacert-2017-09-20.pem"); 
    //curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); 
    curl_setopt($ch, CURLOPT_HTTPHEADER, array('client-id: client-id: FHP20c+somemorecharacters8=')); 
    curl_setopt($ch, CURLOPT_USERPWD, '885a15somemorecharacters4550:'); 

    $output = curl_exec($ch); 
    print curl_error($ch); 
    $status_code = curl_getinfo($ch, CURLINFO_HTTP_CODE); 

    curl_close($ch); 

    file_put_contents('output.txt', $output); 

    echo '<br><b>Output</b><br>' . $output; 
    echo '<br><b>Status-Code</b><br>' . $status_code; 
?>