Quiq::Http::Message - HTTP-Nachricht
Quiq::Hash
Ein Objekt dieser Klasse repräsentiert eine HTTP-Nachricht. Eine HTTP-Nachricht besteht aus einer oder mehreren Kopfzeilen (Header) und einem optionalen Rumpf (Body). Kopfzeilen und Rumpf werden von der Klasse als Attribute implementiert, die durch Methoden der Klasse manipuliert werden können. Eine HTTP-Nachricht, die versendet werden kann, entsteht durch Erzeugen einer Stringrepräsentation des Objekts.
Die Klasse kann für HTTP-Requests als auch für HTTP-Responses verwendet werden. Ggf. müssen weitere Header eingeführt werden.
MEMO: Die Klasse ist nach dem Vorbild von R1::HttpResponse entstanden. Diese sollte so angepasst werden, dass sie Quiq::Http::Message als Basisklasse verwendet.
my $msg = Quiq::Http::Message->new( contentType => 'text/plain', body => "Hello world\n" ); print $msg->asString;
generiert auf STDOUT
Content-Type: text/plain Content-Length: 12 Hello world
my $sock = Quiq::Socket->new($host,$port); my $msg = Quiq::Http::Message->new( contentType => 'text/plain', body => "Hello world\n" ); print $sock $msg->asString;
my $msg = Quiq::Http::Message->new(received=>1,$socket); print $msg->asString;
Die Setzung received=>1 bewirkt, dass wir bei der Auswertung der Headerzeilen nicht strikt sind, d.h. bei unbekannten Headern wird keine Exception geworfen, und die Methode $msg->asString() liefert die Headerinformation exakt so wie sie empfangen wurde, d.h. sie wird nicht aus den Attributen gewonnen.
my $msg = Quiq::Http::Message->new('http/message01.txt'); print $msg->asString;
$http = $class->new(@keyVal); $http = $class->new(@keyVal,$fh); $http = $class->new(@keyVal,$file); $http = $class->new(@keyVal,\$str);
Referenz auf HTTP-Objekt.
Instantiiere ein HTTP Nachrichten-Objekt mit den Eigenschaften @keyVal.
Folgende Eigenschaften können (u.a.) gesetzt werden:
contentType => $type
charset => $charset
contentLength => $n | -1
expires => $date | 'now' | 0
location => $url
setCookie => [$name=>$value,@keyVal]
refresh => [$n,$url]
body => $data
Zum Setzen von Eigenschaften siehe auch die Methoden $msg->set() und $msg->fromString().
Ist eine ungerade Anzahl an Parametern angegeben, wird zunächst die (ggf. leere) Liste von Attribut/Wert-Paaren @keyVal zugewiesen. Alle weiteren Eigenschaften werden via Handle $fh, Datei $file oder String $str gewonnen.
$http->set(@keyVal);
Die Methode liefert keinen Wert zurück.
Setze die Objekteigenschaften @keyVal. Für die Liste der Eigenschaften siehe new().
Ein HTTP-Request ohne Inhalt:
$http->set( host => $host, connection => 'close', );
Eine HTTP-Response:
$http->set( contentType => 'text/html', charset => 'utf-8', setCookie => [id=>4711], setCookie => [user=>'seitzf'], body => "Test\n", );
Dieser Abschnitt beschreibt die Methoden zum Setzen und Abfragen von Kopfzeilen. Generell gilt: Ist ein Argument angegeben, wird die betreffende Kopfzeile gesetzt. Ist kein Argument angegeben, wird der Wert der Kopfzeile geliefert.
Der Name der Methode entspricht dem Namen der HTTP-Kopfzeile unter Anwendung folgender Transformationsregeln:
der erste Buchstabe ist klein geschrieben
Bindestriche sind entfernt
mehrere Worte sind in "camel case" zusammengesetzt
Beispiel: Die Kopfzeile "Content-Type" wird von der Methode contentType() verwaltet.
Der Wert einer Kopfzeilen-Methode ist nicht immer eine Zeichenkette. Er kann auch eine Datenstruktur sein. Dies hängt von der jeweiligen Kopfzeile ab. Im Skalarkontext wird eine Referenz auf die Datenstruktur geliefert, im Array-Kontext die Liste der Elemente (siehe contentType() oder setCookie()).
$bool = $http->received($bool); $bool = $http->received;
$protocol = $http->protocol($protocol); $protocol = $http->protocol;
Die Protokoll-Bezeichnung steht in der ersten Zeile einer Server-Antwort und hat die Form "HTTP/X.Y".
$status = $http->status($status); $status = $http->status;
Der Status steht in der ersten Zeile einer Server-Antwort und ist ein dreistelliger Code in der Form NNN.
$statusText = $http->statusText($statusText); $statusText = $http->statusText;
Der StatusText steht in der ersten Zeile einer Server-Antwort und ist eine textuelle Beschreibung des Statuscode.
$type = $http->contentType($type); $type = $http->contentType;
$charset = $http->charset($charset); $charset = $http->charset;
Setze/Liefere den Zeichensatz, der ergänzend im Content-Type Header angegeben wird.
$userPass = $http->authorization($userPass); $userPass = $http->authorization;
$val = $http->transferEncoding($val); $val = $http->transferEncoding;
$n = $http->contentLength($n); $n = $http->contentLength;
$val = $http->expires($val); $val = $http->expires;
$host = $http->host($host); $host = $http->host;
$userAgent = $http->userAgent($userAgent); $userAgent = $http->userAgent;
$val = $http->connection($val); $val = $http->connection;
$url = $http->location($val); $url = $http->location;
$http->refresh($n); $http->refresh($n,$url); ($n,$url) = $http->refresh; $arr = $http->refresh;
$http->setCookie($name=>$value,@options); @cookies = $http->setCookie; $cookieA = $http->setCookie;
Definiere Cookie $name mit Wert $value und Optionen @options. Existiert Cookie $name bereits, wird seine Definition überschrieben. Die Methode liefert beim Setzen keinen Wert zurück.
Ohne Parameter gerufen liefert die Methode die Liste der Cookie-Objekte zurück. Im Skalarkontext wird eine Referenz auf die Liste geliefert.
Generiere Id und setze permanenten Cookie, der nach 5 Jahren abläuft:
$id = Quiq::Converter->intToWord(time); $http->setCookie( id => $id, expires => '+5y', );
Der Body der HTTP-Antwort ist per Default leer, d.h. sein Wert ist, sofern beim Konstruktoraufruf nichts anderes angegeben wird, ein Leerstring.
Der Body kann gesetzt werden:
$http->body($data);
Oder er kann per Referenz "in place" manipuliert werden:
$ref = $http->bodyRef; $$ref =~ /__TIME__/strftime '%F %H:%M:%S %Z',localtime/eg;
Sein Wert wird geliefert durch:
$data = $http->body;
$body = $http->body($body); $body = $http->body;
$ref = $http->bodyRef;
$http->append($data);
$http->fromString($fh); $http->fromString($file); $http->fromString(\$str);
Die Methode liest eine HTTP-Message als Zeichenkette ein, zerlegt sie in ihre Bestandteile und weist die enthaltene Information den Komponenten des Objektes zu.
Als Quelle kann eine Handle (Filehandle, Socket) eine Datei (Dateiname) oder eine Zeichenkette (Skalar-Referenz) angegeben werden.
$str = $http->asString;
1.192
Frank Seitz, http://fseitz.de/
Copyright (C) 2020 Frank Seitz
This code is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
To install Quiq, copy and paste the appropriate command in to your terminal.
cpanm
cpanm Quiq
CPAN shell
perl -MCPAN -e shell install Quiq
For more information on module installation, please visit the detailed CPAN module installation guide.