2011-04-04 4 views
1

J'utilise PHP Streams pour faire des appels HTTP avec fopen(). Je voudrais imprimer la requête HTTP sous la forme d'une chaîne (en-têtes et contenu) avant qu'elle ne soit envoyée via fopen().Comment obtenir la requête HTTP en tant que chaîne de PHP HTTP Stream

Existe-t-il une fonction qui gère la variable de contexte de flux pour ce faire? Si oui, quelqu'un aurait-il l'amabilité d'en afficher un bref exemple?

Voici une fonction qui attend une URL, va chercher et retourne le contenu:

function do_post_request ($url, $content, $cookie = null) { 
    $headers = array("Content-type: application/x-www-form-urlencoded", 
        $cookie); 

    $all_headers = implode("\r\n", $headers)."\r\n"; 
    $params = array('http' => array("method" => "POST", 
            "content" => $content, 
            "header" => $all_headers, 
           ), 
       ); 

    $ctx = stream_context_create($params); 
    $fp = fopen($url, 'rb', false, $ctx); 
    if (empty($fp)) { 
    throw new Exception("$url: Failed"); 
    } 
    $resp = stream_get_contents($fp); 

    if (empty($resp)) { 
    throw new Exception("error: bad fetch"); 
    } 
    return $resp 
} 
+0

Je ne crois pas que vous puissiez le faire. Où avez-vous besoin de ces en-têtes avant de faire une demande? – Wrikken

+0

En bref, pour le débogage. Je me connecte à un service Web personnalisé et je dois m'assurer que les en-têtes et le contenu du client HTTP correspondent à ce que je souhaite. –

+1

Donc. après le fait (c'est-à-dire pas avant l'envoi) serait assez bon? Je le ferais soit en utilisant 'cURL' ou' HTTPRequest', qui le supporte nativement. Si vous en avez vraiment besoin avec les paramètres 'fopen' & context, je pense que vous devrez créer un wrapper de proxy. – Wrikken

Répondre

0

J'utilise PEAR de HTTP_Request2 qui prend en charge l'interception et l'enregistrement en-têtes envoyés.

Questions connexes