Traditionell werden URLs an hURL mit der Methode easy:SetOpt_URL()
oder z.B. #CURLOPT_URL übergeben. Ab hURL 2.0 können Sie URLs
jedoch auch über URL-Objekte übergeben, die mit diesem Befehl
erstellt wurden. Sobald hurl.URL() abgeschlossen ist, können
Sie das neue URL-Objekt mit Methoden wie url:SetURL()
oder url:SetPort() initialisieren und sie mithilfe von
easy:SetOpt_CURLU an ein easy-Handle übergeben. Die Verwendung
von URL-Objekten anstelle herkömmlicher URLs kann bei komplexen
URLs mit seinen Bestandteilen praktischer sein.
Optional können Sie das URL-Objekt auch initialisieren, indem
Sie eine URL in url$ übergeben. Wenn Sie url$ nicht übergeben,
müssen Sie das URL-Objekt später mit url:SetURL() initialisieren.
Es ist auch möglich, eine Kombination der folgenden Flags zu übergeben:
#CURLU_NON_SUPPORT_SCHEME
-
Wenn gesetzt, können Sie ein nicht unterstütztes Schema ermitteln.
#CURLU_URLENCODE
-
Wenn gesetzt, verschlüsselt die libcurl-URL den Teil bei der
Eingabe, mit Ausnahme von Schema, Port und URL. Beim Festlegen
der Pfadkomponente mit aktivierter URL-Kodierung wird der Schrägstrich
übersprungen. Der Abfrageteil wird vor der URL-Konvertierung
von Leerzeichen in Pluszeichen umgewandelt. Diese URL-Codierung
ist zeichensatzunabhängig und konvertiert die Eingabe Byte
für Byte.
#CURLU_DEFAULT_SCHEME
-
Wenn gesetzt, lässt libcurl zu, dass die URL ohne Schema angegeben
wird und setzt diese dann auf das Standardschema: HTTPS. Überschreibt
das Flag
#CURLU_GUESS_SCHEME, wenn beide gesetzt sind.
#CURLU_GUESS_SCHEME
-
Wenn gesetzt, lässt libcurl das Abrufen der URL ohne Schema
zu und "errät" stattdessen anhand des Hostnamens, welches Schema
gemeint war. Wenn der äußerste Sub-Domain-Name mit DICT, FTP,
IMAP, LDAP, POP3 oder SMTP übereinstimmt, wird dieses Schema
verwendet, andernfalls wird HTTP gewählt. Steht im Konflikt
mit dem Flag
#CURLU_DEFAULT_SCHEME, welches Vorrang hat, wenn beide
gesetzt sind.
#CURLU_NO_AUTHORITY
-
Wenn gesetzt, überspringt die Autoritätsprüfung. Der RFC erlaubt
es einzelnen Schemata, den Host-Teil (normalerweise der einzige
obligatorische Teil der Autorität) wegzulassen, aber libcurl
kann nicht wissen, ob dies für benutzerdefinierte Schemata erlaubt
ist. Die Angabe des Flags erlaubt leere Autoritätsabschnitte,
ähnlich wie es bei Dateischemata gehandhabt wird.
#CURLU_PATH_AS_IS
-
Beim Abrufen von CURLUPART_URL überspringt libcurl die Normalisierung
des Pfads. Dies ist die Prozedur, bei der Curl ansonsten Sequenzen
aus Punkt-Schrägstrich und Punkt-Punkt usw. entfernt. Die gleiche
Option, die für Übertragungen verwendet wird, heißt
#CURLOPT_PATH_AS_IS.
#CURLU_ALLOW_SPACE
-
Wenn gesetzt, wird bei der URL-Parser Leerzeichen (ASCII 32)
zugelassen. Die URL-Syntax erlaubt normalerweise keine Leerzeichen,
aber sie sollten als %20 oder '+' kodiert werden. Auch wenn
Leerzeichen erlaubt sind, sind sie im Schema trotzdem nicht
erlaubt. Wenn ein Leerzeichen in einer URL verwendet wird und
erlaubt ist, wird es so gespeichert, wie es ist, es sei denn,
#CURLU_URLENCODE ist auch gesetzt, was libcurl dazu veranlasst,
das Leerzeichen vor der Speicherung in die URL zu kodieren.
Dies beeinflusst, wie die URL erstellt wird, wenn curl_url_get
anschließend benutzt wird, um die komplette URL oder einzelne
Teile zu extrahieren.
#CURLU_DISALLOW_USER
-
Wenn gesetzt, akzeptiert der URL-Parser keine eingebetteten
Anmeldeinformationen für
#CURLUPART_URL und gibt stattdessen
für solche URLs zurück.
#CURLU_APPENDQUERY
-
Kann nur mit url:SetQuery() verwendet werden. Der angegebene
neue Teil wird dann stattdessen an das Ende der bestehenden
Abfrage angehängt - und wenn der vorherige Teil nicht mit einem
Et-Zeichen (Und-Zeichen) endete, wird ein Et-Zeichen vor dem
neuen angehängten Teil eingefügt. Wenn
#CURLU_APPENDQUERY zusammen
mit #CURLU_URLENCODE verwendet wird, wird das erste '=' Symbol
nicht URL-kodiert.
Bei der Verwendung von Abfragemethoden wie url:GetURL()
oder url:GetPort() haben die Flags eine andere Funktion
und es gibt einige weitere Flags. Hier ist eine Beschreibung
der Flags, die mit Abfragemethoden verwendet werden können:
#CURLU_DEFAULT_PORT
-
Wenn der Handle keinen Port gespeichert hat, sorgt diese Option
dafür, dass curl den Standardport für das verwendete Schema zurückgibt.
#CURLU_DEFAULT_SCHEME
-
Wenn der Handle kein Schema gespeichert hat, führt diese Option
dazu, dass curl das Standardschema anstelle eines Fehlers zurückgibt.
#CURLU_NO_DEFAULT_PORT
-
Weist curl an, keine Portnummer zurückzugeben, wenn sie mit
dem Standardport für das Schema übereinstimmt.
#CURLU_URLDECODE
-
Der Inhalt wird per URL dekodiert, bevor er zurückgegeben wird.
Es wird nicht versucht, das Schema, die Portnummer oder die
vollständige URL zu dekodieren. Die Abfragekomponente erhält
als Bonus auch eine Plus-zu-Leerzeichen-Konvertierung, wenn
diese Option gesetzt ist. Beachten Sie, dass diese URL-Dekodierung
den Zeichensatz nicht berücksichtigt und Sie eine Zeichenkette
mit Daten zurückerhalten, die für eine bestimmte Kodierung bestimmt
sein könnten. Wenn die dekodierte Zeichenkette Byte-Werte kleiner
als 32 enthält, gibt die Abfrageoperation stattdessen einen
Fehler zurück.
#CURLU_URLENCODE
-
Wenn gesetzt, wird die Curl-URL den Teil des Hostnamens kodieren,
wenn eine vollständige URL abgerufen wird. Wenn nicht gesetzt
(Voreinstellung), gibt libcurl die URL mit dem Hostnamen "raw"
zurück, damit IDN-Namen unverändert angezeigt werden. IDN-Hostnamen
verwenden typischerweise Nicht-ASCII-Bytes, die ansonsten prozentual
kodiert würden. Beachten Sie, dass das '%' (Byte 37) auch dann
URL-kodiert wird, wenn keine URL-Kodierung abgefragt wird, um
sicherzustellen, dass der Hostname gültig bleibt.
#CURLU_PUNYCODE
-
Wenn
#CURLU_PUNYCODE abgefragt wird und #CURLU_URLENCODE hingegen
nicht und die Host- oder URL-Teile abgefragt wird, gibt libcurl
den Hostnamen in seiner Punycode-Version zurück, wenn er irgendwelche
Nicht-ASCII-Oktette enthält (und ein IDN-Name ist). Wenn libcurl
ohne IDN-Funktionen erstellt wurde, führt die Verwendung dieses
Bits dazu, dass curl zurückkehrt, wenn der Hostname etwas außerhalb
des ASCII-Bereichs enthält.