2011-06-14 1 views
0

Est-ce que quelqu'un connaît une bibliothèque PHP pour la connexion de serveurs distants utilisant la méthode d'authentification Digest avec qop = auth-int? Ou, si non, maintenant devrais-je construire l'A2 pour le résultat? Il est dit dans la RFC 2617 que j'ai besoin d'utiliser un corps d'entité, mais qu'est-ce que c'est? Je viens d'envoyer une requête GET, elle n'a aucun corps. Merci d'avance.côté client PHP Authentification Digest avec qop = auth-int

Répondre

0

Si vous faites une requête GET, vous ne devriez pas avoir besoin d'auth-int. Si votre service l'exige, vous pouvez supposer un corps d'entité vide (vous pouvez donc faire md5 ("") pour cette partie du hachage A2).

+0

Super, merci beaucoup! –

1

Je cherchais la réponse à votre question aussi, pour des demandes autres que GET. Perheps vous pouvez utiliser quelque chose comme:

$entityBody = file_get_contents('php://input'); 

Je ne l'ai pas testé si cela fonctionne, mais en regardant the answer to this question il me ferait que ce sence devrait.

Notez que ce flux ne peut être lu qu'une fois [1], donc si vous en avez besoin ailleurs, vous devriez réutiliser la variable $ entityBody.

1

From my answer of a similar question:

I mis en œuvre le côté client authentification Digest en PHP avec cURL récemment. Voici le code complet:

<?php 

error_reporting(E_ALL); 
ini_set('display_errors','1'); 

$url = "https://api.example.com/ws.asmx/do"; 
$username = "username"; 
$password = "pwd"; 
$post_data = array(
     'fieldname1' => 'value1', 
     'fieldname2' => 'value2' 
); 

$options = array(
     CURLOPT_URL   => $url, 
     CURLOPT_HEADER   => true,  
     CURLOPT_VERBOSE  => true, 
     CURLOPT_RETURNTRANSFER => true, 
     CURLOPT_FOLLOWLOCATION => true, 
     CURLOPT_SSL_VERIFYPEER => false, // for https 
     CURLOPT_USERPWD  => $username . ":" . $password, 
     CURLOPT_HTTPAUTH  => CURLAUTH_DIGEST, 
     CURLOPT_POST   => true, 
     CURLOPT_POSTFIELDS  => http_build_query($post_data) 
); 

$ch = curl_init(); 

curl_setopt_array($ch, $options); 

try { 
    $raw_response = curl_exec($ch); 

    // validate CURL status 
    if(curl_errno($ch)) 
     throw new Exception(curl_error($ch), 500); 

    // validate HTTP status code (user/password credential issues) 
    $status_code = curl_getinfo($ch, CURLINFO_HTTP_CODE); 
    if ($status_code != 200) 
     throw new Exception("Response with Status Code [" . $status_code . "].", 500); 

} catch(Exception $ex) { 
    if ($ch != null) curl_close($ch); 
    throw new Exception($ex); 
} 

if ($ch != null) curl_close($ch); 

echo "raw response: " . $raw_response; 

?> 
Questions connexes