[linux-l] Webanwendungen per Kommandozeile ansteuern

olafBuddenhagen at gmx.net olafBuddenhagen at gmx.net
So Dez 4 20:36:41 CET 2005


Hallo,

> > Wieso so umständlich? GET-Anfragen zu generieren ist trivial. Ein
> > 
> >    w3m google.com/serach?q=foo
> > 
> > oder
> > 
> >    w3m dict.leo.org?search=bar
> > 
> > tut's wunderbar, wenn man nicht gerade nach Sonderzeichen suchen
> > will.
> 
> Ähhm ... bei URLs gehören sogar Leerzeichen zu den Sonderzeichen.

Wieso wusste ich nur dass diese Einwand kommt?...

Das ist aus zwei Gründen irrelevant: Erstens ist es nicht wirklich
schwer statt der Leerzeichen '+' einzugeben, wenn man den String per
Hand angibt. Und zweitens braucht man das garnicht -- die Browser machen
die Ersetzung selbst. Mit dem '+' spart man sich nur in vielen Fällen
das an sonsten nötige Shell-Quoting.

Die Einzigen Zeichen, die wirklich etwas umständlicher sind, sind die,
die die Bedeutung der URL verändern. Das wären im Fall des
Query-Parameters '&', '#', '%' und '+'. Mehr fallen mir nicht ein.

> 	httptool http://www.google.de/search \
> 	--q='site:de.wikipedia.org "Das ist das Haus vom Nikolaus"'
> 
> Willst du dafür die entsprechende URL zusammenfrickeln?

   w3m google.com/search?q='site:de.wikipedia.org "Das ist das Haus vom Nikolaus"'

oder auch

   w3m 'google.com/search?q=site:de.wikipedia.org "Das ist das Haus vom Nikolaus"'

Wo ist das Problem?

> Viel Spaß. Sonderzeichen sind unter anderem:   ':', ' ' und '"'

Keines dieser Zeichen muss man manuell escapen.

Übrigens könnte man auch sowas wie

   w3m google.com/search?q=`urlesc foobar`
   
machen. Wobei urlesc ein ziemlich simples Progrämmchen wäre, dass es
IIRC irgendwo auch schon gibt.

Ich finde sowas jedenfalls wesentlich einleuchtender, als die gesammte
Abfrage durch irgendein obfuscation-Tool zu jagen, wie Du es
vorschlägst.

> Außerdem finde ich es gar nicht gut, wie das in Shell-Scripten und
> auch PHP-Scripten allgemein läuft: Statt z.B. in PHP ne Funktion zu
> haben, die mehrere Argumente entgegen nimmt, einen für das Programm
> und die anderen für die Parameter (wie die exec*()-Funktionen in C),
> ruft man das Zeug im Stile einer Kommandozeile auf, und muss alle
> kritischen Leerzeichen etc. erstmal durch Escaping-Funktionen jagen.

In PHP gibt es beide Varianten (siehe pcntl_exec()), ebenso wie es in C
beide Varianten gibt (siehe system()).

> Das ist viel umständlicher und außerdem unsicherer, weil man schnell
> mal was doppelt escaped oder das Escaping vergisst, oder nicht mehr
> genau weiß, welches Unterprogramm was schon escaped hat und was nicht.
[...]

Ging es hier um Benutzerschnittstellen, oder um Programmierstil?...

Wenn Du nach Codequalität gegen würdest, dürftest Du bestimmt 90 % aller
freien Software nicht verwenden. (Um Missverständnisse zu vermeiden: Bei
proprietärer Software düfte das Verhältnis noch viel schlechter sein.)

-Olaf-



Mehr Informationen über die Mailingliste linux-l