2010-10-26 16 views
2

Je travaille avec une application Web qui envoie des en-têtes HTTP non standard dans sa réponse à une demande de connexion. L'en-tête en question est:Comment puis-je extraire des en-têtes HTTP non standard en utilisant LWP de Perl?

SSO_STATUS: LoginFailed 

J'ai essayé de l'extraire avec LWP :: Réponse en $response->header('SSO_STATUS') mais il ne fonctionne pas. Cela fonctionne pour les en-têtes standard tels que Set-Cookie, Expires etc.

Existe-t-il un moyen de travailler avec les en-têtes bruts?

Répondre

4

Voir this thread on Perlmonks.

Vous devez accéder à la valeur du champ d'en-tête $response->header('SSO-STATUS').

La syntaxe pour la configuration des champs avec des underscores dans les noms:
$response->header(':SSO_STATUS' => 'foo');

+0

$ response-> header ('SSO-STATUS') ne fonctionne pas. – Yahya

+0

$ response-> headers_as_string obtenir tous les en-têtes, et je peux faire un match regexp sur ce sujet, mais ce serait bien d'avoir une manière plus propre. – Yahya

7

si vous voyez la documentation de HTTP::Headers, il déclare que

Le nom de champ d'en-tête orthographe est normalement canonisé y compris le ' _ 'à' - 'traduction. Il existe certaines applications où ce n'est pas approprié. Le préfixage des noms de champs avec ':' vous permet de forcer une orthographe spécifique. Par exemple, si vous voulez vraiment un champ d'en-tête nom pour apparaître comme foo_bar au lieu de « Foo-Bar », vous pouvez définir comme ceci:

$h->header(":foo_bar" => 1); 

Ces noms de champs sont retournés avec le ':' intacte pour $h->header_field_names et le rappel $h->scan, mais les deux-points n'apparaissent pas dans $h->as_string.

+0

Je n'essaie pas de définir les en-têtes. Je veux juste lire cet en-tête non standard. – Yahya