Inhalt
1. | Grundaufbau |
2.a | Sektion [General] |
2.b | Sektion [AdditionalPostValues] |
2.c | Sektion [FilenameRegExp] |
3.a | Beispiel: ImageVenue |
3.b |
1. Grundaufbau
Jede HOST.INI ist gleich aufgebaut. Die Konventionen sind wie die einer Standard-INI-Datei unter Windows: es gibt Sektionen, Schlüssel und Werte.
Sektionen starten mit einer Zeile, an deren Anfang ein [ und an deren Ende ein ] stehen, gefüllt von dem Sektionsnamen. Sie gelten bis zum Anfang der nächsten Sektion oder (falls keine mehr kommt) bis zum Ende der Datei. Alle übrigen Zeilen sind Paare aus Schlüssel und Werten, wobei die Zeichen vom Anfang einer Zeile bis zum ersten Gleichheitszeichen (=) den Schlüssel darstellen, und alle Zeichen hinter dem ersten Gleichheitszeichen den Wert. Für nähere Belesung empfehle ich den englischen Artikel in Wikipedia - die hier verwendete Implementierung entspricht der WinAPI-Funktion GetPrivateProfileStringW. Wichtig ist jedoch: auch Werte können in Gänsefüßchen stehen, (also eins gleich hinter dem Gleichheitszeichen und eins als letztes der Zeile) - diese werden jedoch beim interpretieren geschluckt. Der Sinn solch einer Einschließung ist, dass damit auch z.B. Leerzeichen als erstes und letztes Zeichen des Wertes mit interpretiert werden (ansonsten findet eine Trimmung statt).
Das Dateiformat kann entweder ANSI oder auch Unicode (Little Endian) sein.
Sektionen starten mit einer Zeile, an deren Anfang ein [ und an deren Ende ein ] stehen, gefüllt von dem Sektionsnamen. Sie gelten bis zum Anfang der nächsten Sektion oder (falls keine mehr kommt) bis zum Ende der Datei. Alle übrigen Zeilen sind Paare aus Schlüssel und Werten, wobei die Zeichen vom Anfang einer Zeile bis zum ersten Gleichheitszeichen (=) den Schlüssel darstellen, und alle Zeichen hinter dem ersten Gleichheitszeichen den Wert. Für nähere Belesung empfehle ich den englischen Artikel in Wikipedia - die hier verwendete Implementierung entspricht der WinAPI-Funktion GetPrivateProfileStringW. Wichtig ist jedoch: auch Werte können in Gänsefüßchen stehen, (also eins gleich hinter dem Gleichheitszeichen und eins als letztes der Zeile) - diese werden jedoch beim interpretieren geschluckt. Der Sinn solch einer Einschließung ist, dass damit auch z.B. Leerzeichen als erstes und letztes Zeichen des Wertes mit interpretiert werden (ansonsten findet eine Trimmung statt).
Das Dateiformat kann entweder ANSI oder auch Unicode (Little Endian) sein.
2.a Sektion [General]
Hier finden sich alle Haupteinstellungen zum Hoster, von denen viele nötig sind. Je nach Hoster kann man einige weglassen und benötigt dafür andere. Lässt man einen weg, gilt immer ein Standardwert dafür. Zur Übersicht nun alle samt Erklärung:
Es gibt noch eine Besonderheit für alle *Pattern-Angaben: wird hier die Zeichenfolge %%filename%% verwendet, so wird diese vor Anwendung des regulären Ausdrucks durch den hochgeladenen Dateinamen ersetzt (natürlich entsprechend escaped). Braucht man bei irgendeiner Suche den Dateinamen der hochgeladenen Datei (um diesen in einer Fülle von Links der Antwortseite wiederzufinden), dann braucht man nur %%filename%% verwenden. Diese Zeichenfolge gilt ausschließlich in Patterns, nicht in Substitutionen oder anderen Einstellungen!
Schlüssel | Bedeutung | Standard |
---|---|---|
allgemeine Einstellungen | ||
Version | (Text) Dateiversionierung: Reine Info für jeden Anwender und Entwickler, in welcher Version die Datei vorliegt. Sollte möglichst im Format yyyy-MM-dd, Autor sein (4stellige Jahreszahl, Bindestrich, 2stellige Monatszahl, Bindestrich, 2stellige Tageszahl, Komma, Leerzeichen, Autorenname) | leer |
Icon | (Text) Hosterbild: Dateiname zum Anzeigen eines kleinen Bildchens zu dem Eintrag in der ComboBox. Dieselbe Datei muss sich dann unter .\host.ico\ befinden. Das Icon sollte in der Größe 16x16 in 256 Farben vorliegen (und möglichst nur dieses eine Format). | leer (keine Bildchenanzeige) |
DisplayName | (Text) Anzeigename des Eintrags in der ComboBox. Dieser Name ist frei wählbar und somit unabhängig vom Dateinamen | leer (kein Anzeigename) |
StartDelay | (Zahl) Wartezeit in Millisekunden, bevor ein Thread mit dem Hochladen bei diesem Hoster starten soll | 0 (keine Wartezeit) |
StartDisconnect | (Zahl) Schalter, ob vor dem Hochladen die Internetverbindung getrennt werden soll (0=nein, 1=ja). Derzeit noch nicht implementiert, da Wiederverbindungsmechanismus noch nicht vorhanden! | 0 (nein) |
MaxFileSize | (Zahl) Höchstdateigröße für den Hoster. Viele Hoster erlauben nur Dateien bis zu einer bestimmten Größe. Und wenn sie von Kilo oder Mega sprechen, meinen sie meist den Faktor 1000 (statt 1024). Hier muss die komplette Zahl angegeben werden, Buchstaben (wie z.B. k und M sind nicht zulässig!). Dieser Eintrag verhindert das Hinzufügen zu großer Dateien zur Liste. Enthält dieser Eintrag jedoch 0, so ist die Dateigröße unbegrenzt. | 0 (keine Größenbeschränkung) |
FileFilterRegExp | (Text) Dateiendungsfilter: Regulärer Ausdruck, mit dem geregelt werden kann, welche Dateiendungen beim Hinzufügen erlaubt sind. Viele Hoster erlauben nur bestimmte Dateiendungen. Ist diese Angabe leer, wird nicht auf Dateiendungen geprüft. | leer (keine Prüfung auf Dateiendung) |
ForceThreads | (Zahl) Höchstanzahl paralleler Prozesse für diesen Hoster: wenn im Programm eingestellt ist, dass z.B. 5 Threads gleichzeitig laufen können, dann kann mit diesem ein restriktiveres Verhalten pro Hoster erzeugt werden. Eine 0 hat keine Auswirkung. Eine 1 bewirkt, dass für speziell diesen Hoster immer nur 1 Hochladeprozess aktiv sein darf. Eine 2, dass es nur 2 parallel sein dürfen, usw... Die Reglementierung ist aus Sicherheitsgründen (zunächst für RapidShare-Premium) gedacht, wo parallele Uploads mit unterschiedlichen Sessions möglicherweise ein Sperren des Kontos zur Folge haben könnten. | 0 (keine Einschränkung) |
Protocol | (Zahl) HTTP-Protokollversion, welches genutzt werden soll: die 9 ist für HTTP 0.9, die 1 für HTTP 1.1 und jede andere Zahl für HTTP 1.0. | HTTP 1.0 |
KeepAlive | (Zahl) Schalter, ob die Verbindung geschlossen werden soll (Connection: close) oder nicht. Eine 1 hält sie offen, die 0 nicht. | 0 (schließen) |
CustomUserAgent | (Text) Setzt für den einzelnen Hoster einen User-Agent und übergeht damit die globale Einstellung - damit kann man sich bei unterschiedlichen Hostern als unterschiedliche Browser ausgeben | leer (Programmeinstellungen gelten) |
ClipboardRegExp | (Text) Kopieren in Zwischenablage: Regulärer Ausdruck, mit dem ein Ergebnis zurechtgestutzt wird anstatt komplett in die Zwischenablage aufgenommen zu werden. Beispielsweise sollen [tag]s um den eigentlichen Link entfernt werden. | leer (Programmeinstellungen gelten) |
RapidshareFilesRegExpPattern | (Text) Rapidshare Premium / Collector: Regulärer Ausdruck, mit dem bei der Ergebnisseite die Anzahl gehosteter Dateien ermitteln soll. Nötig für RapidshareFilesSkipSubst, damit auch hochgeladene Dateien gefunden werden, wenn das Konto über 500 Dateien zählt. | leer |
RapidshareFilesSkipSubst | (Text) Rapidshare Premium / Collector: URL mit Substitionsplatzhalter ($1), um durch die Ergebnisseiten blättern zu können bei mehr als 500 Dateien im Konto. | leer |
Proxy | ||
ProxyHost | (Text) Host: Rechneradresse des Proxys. Falls angegeben, hat dieser Wert Vorrang vor den globalen Programmeinstellungen. | leer (Programmeinstellungen gelten) |
ProxyPort | (Text) Port: Portnummer des Proxys. Falls angegeben, hat dieser Wert Vorrang vor den globalen Programmeinstellungen. | leer (Programmeinstellungen gelten) |
ProxyUser | (Text) Benutzer: Benutzername zur Autentifizierung auf dem Proxy. Falls angegeben, hat dieser Wert Vorrang vor den globalen Programmeinstellungen. | leer (Programmeinstellungen gelten) |
ProxyPass | (Text) Passwort: Passwort zum Autentifizierung auf dem Proxy. Falls angegeben, hat dieser Wert Vorrang vor den globalen Programmeinstellungen. | leer (Programmeinstellungen gelten) |
POST oder GET vor dem Hochladen | ||
PrePostURL | (Text) Vorläufer-POST: vor dem eigentlichen Hochladen der Datei muss evt. ein gewöhnlicher POST durchgeführt werden (bsp.weise, um sich auf einer Seite anzumelden. Hier gibt man die Zieladresse für den POST an, was natürlich mit PrePostData kombiniert werden sollte. Ist diese Angabe leer, erfolgt kein POST vor dem eigentlichen Hochladen. | leer (kein vorheriges POST) |
PrePostData | (Text) Vorläufer-POST-Daten: an die unter PrePostURL angegebene Adresse werden die hier angegebenen Daten gesendet. Das Format ist denkbar einfach: Name-/Wert-Trennung erfolgt durch Gleichheitszeichen (=), Parametertrennung durch kaufmännisches Und (&) - also z.B. login=myname&password=god&x=0&y=0. | leer |
PrePostReferer | (Text) Vorläufer-POST Referer: Referer für die unter PrePostURL angegebene Adresse. Verhalten wie TargetReferer | leer (kein Referer) |
PreloadURL | (Text) Vorläufer-GET: vor dem eigentlichen Hochladen der Datei muss evt. erst eine Seite aufgerufen werden (bsp.weise um ein Cookie zu erzeugen, oder um die dynamische Hochladeadresse ermitteln zu können). Hier gibt man die Zieladresse für die Seite an, was natürlich mit PreloadRegExpPattern kombiniert werden sollte. Ist diese Angabe leer, erfolgt kein Seitenaufruf vor dem eigentlichen Hochladen. | leer (kein vorheriger Seitenaufruf) |
PreloadRegExpPattern | (Text) Vorläufer-Suche: in der Antwort der unter PreloadURL angeforderten Seite oder der unter PrePostURL benutzen POST-Adresse wird mit diesem regulären Ausdruck durchsucht. Die Ergebnisse (Klammernpaare) können sowohl in TargetUploadURL, als auch in allen AdditionalPostValues verwendet werden. Damit können sowohl die Hochladeadresse, als auch die mit ihr mitzuschickenden Variablen dynamisch aufgebaut werden. | leer (keine Auswertung der Antwort) |
PreloadRegExpSubst | (Text) Vorläufer-Suchergebnis: Dieser Text wird entsprechend den Platzhaltern mit den Ergebnissen aus PreloadRegExpPattern substituiert. Siehe ResultRegExpSubst | leer (keine Ersetzung) |
PreloadRegExpNeg | (Text) Test auf negative Antwort: findet dieser reguläre Ausdruck in dem Antwortdokument des Vorläufer-POST oder -GET einen Treffer oder mehr, gilt das Hochladen bereits jetzt als gescheitert. Siehe auch ResultRegExpNeg | leer (keine Negativprüfung) |
PreloadReferer | (Text) Vorläufer-GET Referer: Referer für die unter PreloadURL angegebene Adresse. Verhalten wie TargetReferer | leer (kein Referer) |
Kernfunktion Hochladen | ||
NoEmptyBracketsAdd | (Zahl) Sollte der Schlüssel TargetFieldName ein Feld darstellen (leeres eckiges Klammernpaar [] am Namensende), so scheinen manche Browser trotz alledem zusätzlich noch einen Namen mit Index mitzuschicken. Diese Option regelt, ob Irada dieses Verhalten nachstellen soll. Aber auch hier reagieren Hoster unterschiedlich, deshalb gilt: 0=nein (hinzufügen), 1=ja (nicht beachten). Bisher war es nur ImageVenue, der diese Einstellung erforderte. | 0 (hinzufügen) |
TargetUploadURL | (Text) Zieladresse, auf die der POST gerichtet sein soll - also die Datei hochgeladen werden soll. Kernstück und Hauptaufgabe von Irada. Bei dem gewünschten Hoster ist dies die Adresse, die im <FORM>-Tag als Action definiert ist. Hier muss selbstverständlich die vollständige Adresse stehen, relative machen keinen Sinn! | leer |
TargetReferer | (Text) Referer fürs Ziel: erwartet der Hoster Referer im Header der Anfragen, so kann dieser hier angegeben werden. Allerdings muss jeder Anwender von Irada selbständig auf seinem System sicherstellen, dass nicht etwa eine Desktop-Firewall generell Referer unterbindet. | leer (kein Referer) |
TargetFieldName | (Text) Name der POST-Variable, die für die hochzuladene Datei verantwortlich ist. Erkennbar an dem HTML-Element <INPUT TYPE="file"...>. Erstaunlicherweise heißt er bei den meisten Hostern userfile. Ist bei den Hostern ein Feld mit angegeben (also ein leeres eckiges Klammernpaar [] am Ende), so muss auch dieses mit aufgenommen werden. Gehört also mit zum Namen. | leer |
Ergebnis nach dem Hochladen | ||
ResultIncludeHeaders | (Zahl) Antwort-Header: Die Antwortdatei auf den POST wird anschließend den regulären Ausdrücken zur Verfügung gestellt. Doch manchmal reicht das nicht. Hiermit kann man zusätzlich die Header der Antwort mit vor das eigentliche Dokument setzen - so hat man dann auch Sachen wie Hoster, URL usw... (1=Header mit ausgeben, 0=Nur Antwortdokument) | 0 (keine Header) |
ResultRegExpPattern | (Text) Antwort-Suche: Über die Antwortdatei (ggf. mit deren Headern) wird dieser reguläre Ausdruck rübergejagt. Sinnigerweise arbeitet man hier am besten mit Klammerpaaren, die man dann später bei ResultRegExpSubst sinnvoll adressieren kann. Dieser Ausdruck sucht also nach dem, was wir wissen wollen - und das ist meist der Link für andere zu unserem Upload. In Irada sind alle Hoster-Dateien werkseitig darauf ausgerichtet, einen BBCode-Link zu erspähen. | leer (keine Suche, Antwortdokument ist egal) |
ResultRegExpSubst | (Text) Antwort-Suchergebnis: Dieser Text wird entsprechend den Platzhaltern mit den Ergebnissen aus ResultRegExpPattern substituiert. Für das komplette Ergebnis kann man hier natürlich $0 angeben, oder z.B. $2 für das zweite gefundene Klammernpaar. Genauso ist es möglich, hier mittels Nichtplatzhaltern (also simpler Konstanten, also Text) die Ausgabe zu erweitern. Denn erst das Ergebnis dieser Substitution erscheint dem Programm als Ergebnis. | leer (keine Ersetzung) |
ResultRegExpNeg | (Text) Test auf negative Antwort: findet dieser reguläre Ausdruck in dem Antwortdokument auf den POST einen Treffer oder mehr, gilt das Hochladen als gescheitert. Sehr nützlich, um z.B. auf Meldungen wie "Too many connections", "File is too big" usw... entsprechend zu reagieren. Dazu muss man entsprechende Fehlerantwortseiten natürlich kennen. Findet dieser Ausdruck jedoch nichts und das Hochladen ist trotzdem wegen irgendetwas schiefgelaufen, wird (bis zur Maximalwiederholung) immer wieder von neuem versucht, die Datei hochzuladen. Dieser Ausdruck hat Vorrang vor dem für das (BBCode-Link)Ergebnis. | leer (keine Negativprüfung) |
Seitenaufruf / -anforderung nach dem Hochladen | ||
Follow1URL | (Text) Verfolger 1: nach dem Hochladen und Auswerten der Antwortseite, soll evt. ein Link weiterverfolgt werden. Macht schon dann Sinn, wenn man bei speziellen Hostern nicht die Anzeigeseite mit dem Bild haben will, sondern den direkten Link zum Bild. Hier kann als Platzhalter auch die Ergebnisse aus dem regulären Ausdruck von ResultRegExpPattern verwenden. Wird hier kein Wert angegeben, gilt der Hochladeprozess als beendet. | leer (keine weitere Verfolgung) |
Follow1PostData | (Text) Verfolger 1 POST: Wird dieser Wert befüllt (nach Regeln wie unter PrePostData), so wird auf die URL unter Follow1URL ein POST abgesetzt mit den hier eingetragenen Werten als Sendeinformationen. Andernfalls wird auf die Adresse nur ein GET gemacht. Das POSTen macht auch wieder nur in speziellen Fällen Sinn, z.B. kann man bei einigen Hostern nach dem Hochladen noch spezielle Einstellungen vornehmen (Schatten für Vorschaubilder etc.), die dann hiermit realisiert werden könnten. | leer (kein POST) |
Follow1RegExpPattern | (Text) Verfolger 1 Suche: die unter Follow1URL aufgerufene Seite wird mittels diesem regulären Ausdruck durchsucht. Die Funktionsweise ist dieselbe wie bei ResultRegExpPattern. | leer (keine Suche) |
Follow1RegExpSubst | (Text) Verfolger 1 Suchergebnis: Dieser Text wird entsprechend den Platzhaltern mit den Ergebnissen aus Follow1RegExpPattern substituiert. Funktioniert genauso wie ResultRegExpPattern. | leer (keine Ersetzung) |
Follow1RegExpNeg | (Text) Test auf negative Antwort: findet dieser reguläre Ausdruck in dem unter Follow1URL angefordertem Antwortdokument einen Treffer oder mehr, gilt das Hochladen als gescheitert. Siehe auch ResultRegExpNeg | leer (keine Negativprüfung) |
Follow1Referer | (Text) Verfolger 1 Referer: Referer für die unter Follow1URL angegebene Adresse. Verhalten wie TargetReferer | leer (kein Referer) |
Zweiter Seitenaufruf / -anforderung nach dem Hochladen | ||
Follow2URL | (Text) Verfolger 2: Wie Follow1URL, nur mit Bezug auf allen Angaben aus den Follow1-Werten. | leer (keine weitere Verfolgung) |
Follow2PostData | (Text) Verfolger 2 POST: Wie Follow1PostData | leer (kein POST) |
Follow2RegExpPattern | (Text) Verfolger 2 Suche: Wie Follow1RegExpPattern | leer (keine Suche) |
Follow2RegExpSubst | (Text) Verfolger 2 Suchergebnis: Wie Follow1RegExpSubst | leer (keine Ersetzung) |
Follow2RegExpNeg | (Text) Test auf negative Antwort: Wie Follow1RegExpNeg | leer (keine Negativprüfung) |
Follow2Referer | (Text) Verfolger 2 Referer: Wie Follow1Referer | leer (kein Referer) |
Dritter Seitenaufruf / -anforderung nach dem Hochladen | ||
Follow3URL | (Text) Verfolger 3: Wie Follow1URL, nur mit Bezug auf allen Angaben aus den Follow2-Werten. | leer (keine weitere Verfolgung) |
Follow3PostData | (Text) Verfolger 3 POST: Wie Follow1PostData | leer (kein POST) |
Follow3RegExpPattern | (Text) Verfolger 3 Suche: Wie Follow1RegExpPattern | leer (keine Suche) |
Follow3RegExpSubst | (Text) Verfolger 3 Suchergebnis: Wie Follow1RegExpSubst | leer (keine Ersetzung) |
Follow3RegExpNeg | (Text) Test auf negative Antwort: Wie Follow1RegExpNeg | leer (keine Negativprüfung) |
Follow3Referer | (Text) Verfolger 3 Referer: Wie Follow1Referer | leer (kein Referer) |
Es gibt noch eine Besonderheit für alle *Pattern-Angaben: wird hier die Zeichenfolge %%filename%% verwendet, so wird diese vor Anwendung des regulären Ausdrucks durch den hochgeladenen Dateinamen ersetzt (natürlich entsprechend escaped). Braucht man bei irgendeiner Suche den Dateinamen der hochgeladenen Datei (um diesen in einer Fülle von Links der Antwortseite wiederzufinden), dann braucht man nur %%filename%% verwenden. Diese Zeichenfolge gilt ausschließlich in Patterns, nicht in Substitutionen oder anderen Einstellungen!
2.b Sektion [AdditionalPostValues]
Alle Schlüssel-Wert-Paare hierdrin werden beim Hochladen als Name-Wert-Parameter dem POST (neben der eigentlichen Datei) hinzugefügt. Die Anzahl ist quasi unbeschränkt.
Bei den Werten können sogar Platzhalter wie $1, $2 usw... angegeben werden, wenn die Einstellung PreloadRegExpPattern entsprechend benutzt wurde. Dann werden jene Platzhalter mit den Ergebnissen des Vorläufers gefüllt und können so dynamisch angepasst werden.
Bei den Werten können sogar Platzhalter wie $1, $2 usw... angegeben werden, wenn die Einstellung PreloadRegExpPattern entsprechend benutzt wurde. Dann werden jene Platzhalter mit den Ergebnissen des Vorläufers gefüllt und können so dynamisch angepasst werden.
2.c Sektion [FilenameRegExp]
Der für die Zeichenfolge %%filename%% zurückgegebene Dateiname muss ggf. pro Hoster noch weiter bearbeitet werden. Dazu können in dieser Sektion Paare von Regulären Ausdrücken und Substitutionen angegeben werden. Pro Ersetzung müssen sich immer zwei Schlüsselpaare finden, die denselben frei wählbaren Präfix haben (z.B. 01) und als Suffix jeweils Pattern (für das Suchmuster) und Subst (für die Substitution).
3.a Beispiel: ImageVenue
ImageVenue ist ein einfacher Fall - das Hochladen ist trivial und die anschließende Linkermittlung ebenfalls leicht. Nehmen wir uns also die entsprechende INI-Datei zur Brust:
Die einzige Besonderheit ist die Einstellung NoEmptyBracketsAdd: bisher ist sie nur für ImageVenue nötig. Alle Angaben in der Sektion AdditionalPostValues sind so gewählt, wie sie bei einem normalen POST auch stattfinden würden.
Zum Testen (und Herausfinden) eignet sich hier hervorragend der Mozilla Firefox mit der Erweiterung Live HTTP Headers:
Beispielsweise ergibt die Erweiterung bei diesem Hoster folgende Ausgabe (mit einer Textdatei als JPG umbenannt):
Schlüssel | Wert | Funktion / Aufgabe |
---|---|---|
Sektion [General] | ||
Version | 2008-02-03, AmigoJack | Info für Entwickler: diese Dateiversion ist vom 03. Februar 2008 und wurde von AmigoJack erstellt |
Icon | imagevenue.ico | Im Verzeichnis .\host.ico existiert die Datei imagevenue.ico, die zum Anzeigen genutzt werden kann. Designfeature ;-) |
DisplayName | ImageVenue (safe for work) | Anzuzeigender Name im Programm. Dieser sollte am aussagekräftigsten sein und auch nirgends doppelt auftauchen! |
MaxFileSize | 3000000 | ImageVenue erlaubt nur Dateien bis zu einer bestimmten Größe. Sie sprechen von "3 MB", meinen aber entweder nur 3.000 KB oder gar nur 3.000.000 Byte, daher wählen wir das kleinste. Fügt man jetzt unter Auswahl dieses Hosters der Liste von Irada Dateien hinzu, die größer sind, werden diese gar nicht erst aufgenommen |
FileFilterRegExp | #jpeg|jpg#i | ImageVenue erlaubt auch nur entsprechende Dateiendungen. Dieser reguläre Ausdruck prüft, ob die Dateiendung (alles hinter dem letzten Punkt) jpg oder jpeg ist. Fügt man jetzt unter Auswahl dieses Hosters der Liste von Irada Dateien hinzu, die eine andere Dateiendung haben, werden diese gar nicht erst aufgenommen |
NoEmptyBracketsAdd | 1 | Ein Spezialfall von ImageVenue: verhindert, dass aufgrund des Feldes des Namens unter TargetFieldName nochmal ein weiterer Wert mitgeneriert und -verschickt wird |
TargetUploadURL | http://www.imagevenue.com/upload.php | Die Adresse, an die der POST gesendet wird. Lässt sich aus dem Quellcode der Ausgangsseite (wo man die Datei zum Hochladen auswählt) finden, indem man die ACTION-Eigenschaft des entsprechenden <FORM ... />-Tags auswertet und eine absolute Adresse daraus erstellt |
TargetFieldName | userfile[] | Dies ist der Wert für die hochzuladende Datei. Erkennbar im Quellcode an dem <INPUT TYPE="file" ... />-Tag. Der Name muss 100%ig übernommen werden - also auch eckige Klammern, wie hier deutlich sichtbar |
ResultRegExpPattern | #(\[URL=.*/URL\])#ism | Der BBCode-Link, den wir in der Antwortdatei des Servers suchen. Dieser reguläre Ausdruck sucht also nach [URL= ... /URL] |
ResultRegExpSubst | $1 | Das Ergebnis des ersten (eigentlich einzigen) Klammernpaares unter ResultRegExpPattern soll zurückgegeben werden, also nur der Substitionstext $1 |
ResultRegExpNeg | #(/IMG\][^\[])|(File too big)|(can not store this type)#ism | Negativerkennung: Liefert dieser reguläre Ausdruck ein Ergebnis, gilt das Hochladen als gescheitert. Wie man unschwer erkennen kann, wollen wir hier Antworten erkennen wie z.B. dass das Bild zu groß sei oder dass der Dateiinhalt irgendwie falsch war (wo jpg draufsteht muss noch lange nicht jpg drin sein). Oder der zurückgegebene Link ist gar keiner, sondern schon das Bild direkt (weil es viel zu klein war und entsprechend von ImageVenue gar kein Vorschaubild extra erzeugt wurde) |
Sektion [AdditionalPostValues] | ||
MAX_FILE_SIZE | Warum ImageVenue sich selbst einen Wert ohne Inhalt schickt? Keine Ahnung... | |
imgcontent | safe | Dies ist die ComboBox, bei der man zwischen dem Bildinhalt entscheidet. Der andere mögliche Wert wäre unsafe |
action | 1 | Auch keine Ahnung, warum wir das mitschicken sollen |
img_resize | Es gibt die Option, die Bilddimensionen automatisch zu verändern. Das wollen wir aber nicht, daher bleibt der Inhalt leer | |
submit | Send file(s) | Der Hochlade-Button. Alle Browser schicken auch diesen als Wert bei einem POST mit |
Die einzige Besonderheit ist die Einstellung NoEmptyBracketsAdd: bisher ist sie nur für ImageVenue nötig. Alle Angaben in der Sektion AdditionalPostValues sind so gewählt, wie sie bei einem normalen POST auch stattfinden würden.
Zum Testen (und Herausfinden) eignet sich hier hervorragend der Mozilla Firefox mit der Erweiterung Live HTTP Headers:
- Man macht auf der entsprechenden Hoster-Hochlade-Seite alle Angaben, wählt die Datei aus, aktiviert die Erweiterung und lädt das ganze hoch.
- Mit Hilfe der aufgezeicheten Header und POST-Daten kann man recht schnell erkennen, welche Werte z.B. bei der Sektion AdditionalPostValues mit welchem Inhalt eingetragen werden müssten. Die Sache hat nur einen Haken: da der Inhalt der hochzladenden Datei ebenfalls als Inhalt eines Wertes gilt, bricht das Plugin die Anzeige der Erweiterung meist aufgrund eines bestimmten ASCII-Wertes innerhalb dieser Datei ab. Daher empfiehlt es sich, statt einer echten JPG-Datei eine Textdatei mit wenig Inhalt (drei Wörter reichen) zu nehmen, diese in z.B. TEST.JPG umzubenennen und diese dann hochzuladen. Somit bekommt man erstmal eine Anzeige aller tatsächlich verschickten Werte samt Inhalt.
- Die Antwortseite des Servers ist dann natürlich unbrauchbar, da er erkannt haben wird, dass es sich nicht um ein Bild handelt. Also das ganze nochmal - nur jetzt mit einer echten JPG-Datei (diesmal interessieren uns die Header auch nicht mehr).
- Aus der Struktur der Antwortdatei müssen wir bloß noch erkennen, wie wir einen sinnvollen regulären Ausdruck für ResultRegExpPattern erstellen können.
- Und dann das ganze nochmal für Extremfälle, wie z.B. JPG-Bilder mit sehr großen Dimensionen, zu kleinen Dimensionen und evt. nochmal die umbenannte Textdatei, damit wir auch für ResultRegExpNeg einen regulären Ausdruck erstellen können.
Beispielsweise ergibt die Erweiterung bei diesem Hoster folgende Ausgabe (mit einer Textdatei als JPG umbenannt):
http://www.imagevenue.com/upload.php POST /upload.php HTTP/1.1 Host: www.imagevenue.com User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; de; rv:1.8.0.9) Gecko/20061206 Firefox/1.5.0.9 Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5 Accept-Language: de-de,de;q=0.8,en-us;q=0.5,en;q=0.3 Accept-Encoding: gzip,deflate Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7 Keep-Alive: 300 Connection: keep-alive Referer: http://www.imagevenue.com/ Cookie: __qca=1194716692-81631305-42196473; __utmz=122915731.1199815563.1.1.utmccn=(direct)|utmcsr=(direct)|utmcmd=(none); ctriv2=1; __utma=122915731.1818741812.1199815563.1200841709.1203268321.4; __utmb=122915731; __utmc=122915731; __qcb=764999590 Content-Type: multipart/form-data; boundary=---------------------------41184676334 Content-Length: 1201 -----------------------------41184676334 Content-Disposition: form-data; name="userfile[]"; filename="Neu Textdokument.jpg" Content-Type: image/jpeg fdsafdsa -----------------------------41184676334 Content-Disposition: form-data; name="userfile[]"; filename="" Content-Type: application/octet-stream -----------------------------41184676334 Content-Disposition: form-data; name="userfile[]"; filename="" Content-Type: application/octet-stream -----------------------------41184676334 Content-Disposition: form-data; name="userfile[]"; filename="" Content-Type: application/octet-stream -----------------------------41184676334 Content-Disposition: form-data; name="userfile[]"; filename="" Content-Type: application/octet-stream -----------------------------41184676334 Content-Disposition: form-data; name="imgcontent" safe -----------------------------41184676334 Content-Disposition: form-data; name="MAX_FILE_SIZE" -----------------------------41184676334 Content-Disposition: form-data; name="action" 1 -----------------------------41184676334 Content-Disposition: form-data; name="img_resize" -----------------------------41184676334-- HTTP/1.x 200 OK Date: Sun, 17 Feb 2008 17:06:36 GMT Server: Apache/2.0.52 (CentOS) X-Powered-By: PHP/4.3.9 Set-Cookie: tsctr=2641161400; expires=Tue, 18-Mar-2008 17:06:36 GMT; path=/; domain=.imagevenue.com Content-Length: 3272 Connection: close Content-Type: text/html; charset=UTF-8
3.b Beispiel: Rapidshare
Anmerkung: inzwischen wird Rapidshare nicht mehr unterstützt, daher kann das folgende Beispiel nicht mehr nachvollzogen werden.
RapidShare hat einen etwas gehobeneren Anspruch. Die Einstellungen zu Version, Icon, DisplayName und MaxFileSize lasse ich an dieser Stelle weg, ihr Zweck und ihre Funktion ist genau dieselbe wie die im Beispiel ImageVenue. Auch die AdditionalPostValues-Sektion lasse ich weg, die Werte hier sind ebenso ermittelt worden und haben keinen tieferen Sinn:
Besonderheiten hier wären:
Die unter dem Beispiel ImageVenue erwähnte Erweiterung liefert bei diesem Hoster folgende Ausgabe (mit dem Hochladen einer Textdatei):
RapidShare hat einen etwas gehobeneren Anspruch. Die Einstellungen zu Version, Icon, DisplayName und MaxFileSize lasse ich an dieser Stelle weg, ihr Zweck und ihre Funktion ist genau dieselbe wie die im Beispiel ImageVenue. Auch die AdditionalPostValues-Sektion lasse ich weg, die Werte hier sind ebenso ermittelt worden und haben keinen tieferen Sinn:
Schlüssel | Wert | Funktion / Aufgabe |
---|---|---|
Sektion [General] | ||
PreloadURL | http://www.rapidshare.com/ | Vor dem eigentlichen Hochladen müssen wir erst die Seite besuchen, von der wir im Browser hochladen müssen. Das ist deshalb nötig, weil die Hochladeadresse jedesmal anders aussehen könnten. Also rufen wir die Seite auf und durchsuchen sie nach der entscheidenden dynamischen Stelle |
PreloadRegExpPattern | /form name="ul" method="post" action="([^"]+)" enctype="multipart/ism | Was soll denn in der mit PreloadURL bekommenen Seite gesucht werden? Konkret suchen wir den <FORM .../>-Tag und dadrin seinen Wert für die Eigenschaft ACTION |
TargetUploadURL | $1 | Die Adresse, an die der POST gesendet wird. Hier können wir Ergebnisse aus PreloadRegExpPattern eintragen - also machen wir das auch: mit $1 wählen wir das Ergebnis des ersten Klammernpaares des regulären Ausdrucks |
TargetFieldName | filecontent | Dies ist der Wert für die hochzuladende Datei. Erkennbar im Quellcode an dem <INPUT TYPE="file" ... />-Tag |
ResultRegExpPattern | /Download-Link #1[^ ]+ href="([^"]+)"/ism | Der Link, den wir in der Antwortdatei des Servers suchen. Dieser reguläre Ausdruck sucht also nach einem <A ...>-Tag, der vorher den Wortlaut "Download-Link" hatte |
ResultRegExpSubst | [url]$1[/url] | Das Ergebnis des ersten (eigentlich einzigen) Klammernpaares unter ResultRegExpPattern soll zurückgegeben und gleich als BBCode dargestellt werden, also der Substitionstext $1 umschlossen von den BBCode-Tags [URL] ... [/URL] |
Besonderheiten hier wären:
- die vorher zu ladende Seite,
- das setzen der damit herausgefundenen Hochladeadresse und
- der Umstand, dass RapidShare keinen BBCode-Link liefert.
Die unter dem Beispiel ImageVenue erwähnte Erweiterung liefert bei diesem Hoster folgende Ausgabe (mit dem Hochladen einer Textdatei):
http://rs372l3.rapidshare.com/cgi-bin/upload.cgi?rsuploadid=143789340485944512 POST /cgi-bin/upload.cgi?rsuploadid=143789340485944512 HTTP/1.1 Host: rs372l3.rapidshare.com User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; de; rv:1.8.0.9) Gecko/20061206 Firefox/1.5.0.9 Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5 Accept-Language: de-de,de;q=0.8,en-us;q=0.5,en;q=0.3 Accept-Encoding: gzip,deflate Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7 Keep-Alive: 300 Connection: keep-alive Referer: http://www.rapidshare.com/ Content-Type: multipart/form-data; boundary=---------------------------265001916915724 Content-Length: 414 -----------------------------265001916915724 Content-Disposition: form-data; name="mirror" on -----------------------------265001916915724 Content-Disposition: form-data; name="german" 1 -----------------------------265001916915724 Content-Disposition: form-data; name="filecontent"; filename="Neu Textdokument.jpg" Content-Type: image/jpeg fdsafdsa -----------------------------265001916915724-- HTTP/1.x 200 OK P3P: CP="ALL DSP COR CURa ADMa DEVa TAIa PSAa PSDa IVAa IVDa CONa TELa OUR STP UNI NAV STA PRE" Date: Sun, 17 Feb 2008 17:12:42 GMT Connection: close Accept-Ranges: bytes Content-Type: text/html; charset=ISO-8859-1 Cache-Control: no-cache Content-Length: 5867
Letzte Aktualisierung: 2012-10-14