Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

HTTP Traffic nach HTML wandeln

2 views
Skip to first unread message

Andreas Kohlbach

unread,
Mar 7, 2013, 8:12:29 PM3/7/13
to
Ich habe das, was der Browser anhand eines (Flash) Formulars normal an
den Server senden würde abgefangen, und in einer Datei gespeichert. Ich
würde daraus gerne wieder das ursprüngliche Formular bauen, aber diesmal
in HTML statt Flash. [1]

Die Datei hat einen Head, der hier nicht interessieren soll, und ein
Haufen von "Items" im Body. Das sieht gekürzt etwa so aus.

...
email=what%2540ever.com&birthdate_month=26&birthdate_day=1
...

Da kommt sehe sehr viel, dass ich das nicht manuell machen kann.

Aussehen soll es danach etwa wie

...
<input type="text" name="email">
<input type="hidden" name="birthdate_month" value="12">
<input type="hidden" name="birthdate_day" value="1">
...

Die '"'' dürfen auch gerne wegfallen. Leider stehen auch noch Dinge wie
"%20" und anderes mit "%" im Source, was auch umgewandelt werden müsste.

Es kann den "type" immer gleich ("text" oder "hidden") setzen, dass ich das
dann manuell richten würde. Wichtig ist mir "name" und ggf. "value".

Gibt es ein Linux Tool, oder kann man eine Library anzapfen, die aus dem
Traffic dann HTML macht, ggf. auch Browser Extensions?

Sonst müsste ich mich ran setzen, und wohl ein (bash/sh) Skript
schreiben, was ich aber vermeiden will.

[1] Das Original ist nicht mein Flash, als dass ich das editieren könnte.

X'post de.comp.os.unix.linux.misc, de.comp.os.unix.apps.misc,
de.comp.os.unix.shell, de.comm.infosystems.www.authoring.misc + f'up2
de.comp.os.unix.apps.misc, ggf. bitte passend umbiegen.
--
Andreas
Linux: The choice of a GNU generation.

Gernot Fink

unread,
Mar 8, 2013, 2:47:49 AM3/8/13
to
In article <87ip52z...@usenet.ankman.de>,
Andreas Kohlbach <march13....@spamgourmet.com> writes:
> ...
> email=what%2540ever.com&birthdate_month=26&birthdate_day=1
> ...
> Aussehen soll es danach etwa wie
> ...
> <input type="text" name="email">
> <input type="hidden" name="birthdate_month" value="12">
> <input type="hidden" name="birthdate_day" value="1">
> ...

schau die mal awk (gawk) an.

--
MFG Gernot

Thomas 'PointedEars' Lahn

unread,
Mar 8, 2013, 12:47:07 PM3/8/13
to
X-Post & F'up2 de.comp.os.unix.shell

Andreas Kohlbach wrote:

> Ich habe das, was der Browser anhand eines (Flash) Formulars normal an
> den Server senden würde abgefangen, und in einer Datei gespeichert. Ich
> würde daraus gerne wieder das ursprüngliche Formular bauen, aber diesmal
> in HTML statt Flash. [1]
>
> Die Datei hat einen Head, der hier nicht interessieren soll, und ein
> Haufen von "Items" im Body. Das sieht gekürzt etwa so aus.
>
> ...
> email=what%2540ever.com&birthdate_month=26&birthdate_day=1
> ...
>
> Da kommt sehe sehr viel, dass ich das nicht manuell machen kann.
>
> Aussehen soll es danach etwa wie
>
> ...
> <input type="text" name="email">
> <input type="hidden" name="birthdate_month" value="12">
> <input type="hidden" name="birthdate_day" value="1">
> ...
>
> Die '"'' dürfen auch gerne wegfallen. Leider stehen auch noch Dinge wie
> "%20" und anderes mit "%" im Source, was auch umgewandelt werden müsste.
>
> Es kann den "type" immer gleich ("text" oder "hidden") setzen, dass ich
> das dann manuell richten würde. Wichtig ist mir "name" und ggf. "value".
>
> Gibt es ein Linux Tool, oder kann man eine Library anzapfen, die aus dem
> Traffic dann HTML macht, ggf. auch Browser Extensions?

Da ist mir nichts bekannt. Die „Web Developer“-Extension kann AFAIK nicht
mit Flash-Formularen umgehen.

> Sonst müsste ich mich ran setzen, und wohl ein (bash/sh) Skript
> schreiben, was ich aber vermeiden will.

Shit happens. awk(1) ist aber nicht so schwierig zu lernen:

… | awk -F '&' '…'

Ausserdem gibt es noch PHP, Perl, Python etc., die alle Strings an einem
Trennzeichen trennen und die Teile einzeln in einer Schleife ausgeben
können.

Sogar eine Bourne (Again) SHell kann das, wenn man vorher IFS='&' setzt und
dann über den ohne <"> expandierten *String* iteriert. Ein bisschen
schwieriger wird es, weil die Werte URL-encoded sind, da man die decodieren
und für HTML ggf. wieder codieren muss. Mit (GNU) printf(1) ist aber auch
das kein Problem:

$ printf '\x25'
%

$ printf '\U20AC'


Es lohnt sich also, sich dahinterzuklemmen.

--
PointedEars

Twitter: @PointedEars2
Please do not Cc: me. / Bitte keine Kopien per E-Mail.

Cyrus Kriticos

unread,
Mar 8, 2013, 3:06:03 PM3/8/13
to
On 03/08/2013 02:12 AM, Andreas Kohlbach wrote:
> Ich habe das, was der Browser anhand eines (Flash) Formulars normal an
> den Server senden würde abgefangen, und in einer Datei gespeichert. Ich
> würde daraus gerne wieder das ursprüngliche Formular bauen, aber diesmal
> in HTML statt Flash. [1]
>
> Die Datei hat einen Head, der hier nicht interessieren soll, und ein
> Haufen von "Items" im Body. Das sieht gekürzt etwa so aus.
>
> ...
> email=what%2540ever.com&birthdate_month=26&birthdate_day=1
> ...
>
> Da kommt sehe sehr viel, dass ich das nicht manuell machen kann.
>
> Aussehen soll es danach etwa wie
>
> ...
> <input type="text" name="email">
> <input type="hidden" name="birthdate_month" value="12">
> <input type="hidden" name="birthdate_day" value="1">
> ...
>
> Die '"'' dürfen auch gerne wegfallen. Leider stehen auch noch Dinge wie
> "%20" und anderes mit "%" im Source, was auch umgewandelt werden müsste.
>
> Es kann den "type" immer gleich ("text" oder "hidden") setzen, dass ich das
> dann manuell richten würde. Wichtig ist mir "name" und ggf. "value".

Wenn Du php-cli oder perl installiert hast ist das kein Problem. Eine
Lösung, die einen Teil mit php-cli und sed macht, könnte so aussehen:

php foo.php < DATEINAME | sed 'y/&/\n/' | sed 's/^\(.*\)=\(.*\)$/<input
type="text" name="\1" value="\2">/'


In der Datei DATEINAME steht Dein abgefangenes Zeugs.

In foo.php steht etwas wie:


<?php
$x = fopen( 'php://stdin', 'r' );
while( $line = fgets( $x ) )
{
echo urldecode($line);
}
fclose( $x );
?>


Die Ausgabe wäre dann:

<input type="text" name="email" value="what%40ever.com">
<input type="text" name="birthdate_month" value="26">
<input type="text" name="birthdate_day" value="1">



Dein obiges %2540 ist wohl eine zweifache Codierung des @-Zeichens.

--
Grüße | "Alle sagten: das geht nicht. Dann kam einer, der
Cyrus | wusste das nicht und hats gemacht." -- unbekannt

Cyrus Kriticos

unread,
Mar 8, 2013, 3:19:57 PM3/8/13
to
On 03/08/2013 02:12 AM, Andreas Kohlbach wrote:
> Ich habe das, was der Browser anhand eines (Flash) Formulars normal an
> den Server senden würde abgefangen, und in einer Datei gespeichert. Ich
> würde daraus gerne wieder das ursprüngliche Formular bauen, aber diesmal
> in HTML statt Flash. [1]
>
> Die Datei hat einen Head, der hier nicht interessieren soll, und ein
> Haufen von "Items" im Body. Das sieht gekürzt etwa so aus.
>
> ...
> email=what%2540ever.com&birthdate_month=26&birthdate_day=1
> ...
>
> Da kommt sehe sehr viel, dass ich das nicht manuell machen kann.
>
> Aussehen soll es danach etwa wie
>
> ...
> <input type="text" name="email">
> <input type="hidden" name="birthdate_month" value="12">
> <input type="hidden" name="birthdate_day" value="1">
> ...
>
> Die '"'' dürfen auch gerne wegfallen. Leider stehen auch noch Dinge wie
> "%20" und anderes mit "%" im Source, was auch umgewandelt werden müsste.
>
> Es kann den "type" immer gleich ("text" oder "hidden") setzen, dass ich das
> dann manuell richten würde. Wichtig ist mir "name" und ggf. "value".

Eine Lösung mit sed und xargs:

sed -e's/%\([0-9A-F][0-9A-F]\)/\\\\\x\1/g' < DATEINAME | xargs echo -e |
sed 'y/&/\n/' | sed 's/^\(.*\)=\(.*\)$/<input type="text" name="\1"
value="\2">/'


In der Datei DATEINAME steht Dein abgefangenes Zeugs.


Thomas 'PointedEars' Lahn

unread,
Mar 8, 2013, 3:23:18 PM3/8/13
to
Cyrus Kriticos wrote:

> php foo.php < DATEINAME | sed 'y/&/\n/' | sed 's/^\(.*\)=\(.*\)$/<input
> type="text" name="\1" value="\2">/'
>
>
> In der Datei DATEINAME steht Dein abgefangenes Zeugs.
>
> In foo.php steht etwas wie:
>
>
> <?php
> $x = fopen( 'php://stdin', 'r' );
> while( $line = fgets( $x ) )
> {
> echo urldecode($line);
> }
> fclose( $x );
> ?>

JFYI: <http://php.net/explode>

$ php -r 'print_r(explode("&", "foo&bar=baz&bla"));'
Array
(
[0] => foo
[1] => bar=baz
[2] => bla
)

F'up2 de.comp.lang.php

Thomas 'PointedEars' Lahn

unread,
Mar 8, 2013, 3:54:06 PM3/8/13
to
Cyrus Kriticos wrote:

> On 03/08/2013 02:12 AM, Andreas Kohlbach wrote:
>> Ich habe das, was der Browser anhand eines (Flash) Formulars normal an
>> den Server senden würde abgefangen, und in einer Datei gespeichert. Ich
>> würde daraus gerne wieder das ursprüngliche Formular bauen, aber diesmal
>> in HTML statt Flash. [1]
>>
>> Die Datei hat einen Head, der hier nicht interessieren soll, und ein
>> Haufen von "Items" im Body. Das sieht gekürzt etwa so aus.
>>
>> ...
>> email=what%2540ever.com&birthdate_month=26&birthdate_day=1
>> ...
>>
>> Da kommt sehe sehr viel, dass ich das nicht manuell machen kann.
>>
>> Aussehen soll es danach etwa wie
>>
>> ...
>> <input type="text" name="email">
>> <input type="hidden" name="birthdate_month" value="12">
>> <input type="hidden" name="birthdate_day" value="1">
>> ...
>>
>> Die '"'' dürfen auch gerne wegfallen. Leider stehen auch noch Dinge wie
>> "%20" und anderes mit "%" im Source, was auch umgewandelt werden müsste.
>>
>> Es kann den "type" immer gleich ("text" oder "hidden") setzen, dass ich
>> das dann manuell richten würde. Wichtig ist mir "name" und ggf. "value".
>
> Eine Lösung mit sed und xargs:

Das ist keine Lösung, sondern ineffizienter, nicht portabler Mist. Aber
wenn man nur einen Hammer (sed -e 's/…') hat, sieht eben jedes Problem wie
ein Nagel (Ersetzungsproblem) aus.

> sed -e's/%\([0-9A-F][0-9A-F]\)/\\\\\x\1/g' < DATEINAME |
^^^^^^ ^^^^^^ ^^^^^^^^
man locales, sed, RFC 3986. Was soll das?

> xargs echo -e |
^^
Nicht portabel.

> sed 'y/&/\n/' | sed 's/^\(.*\)=\(.*\)$/<input type="text" name="\1"
> value="\2">/'

$ printf '%s' 'email=what%2540ever.com&birthdate_month=26&birthdate_day=1' |
awk -v RS='&' '{
split($0, fields, "=");
printf "<input type=\"hidden\" name=\"%s\" value=\"%s\">\n", fields[1],
fields[2];
}'
<input type="hidden" name="email" value="what%2540ever.com">
<input type="hidden" name="birthdate_month" value="26">
<input type="hidden" name="birthdate_day" value="1">

Wie die URI-Decodierung gehen könnte, habe ich schon erwähnt. Entscheidend
ist hier aber, dass es sich bei “%AB%XY” um *UTF-8-Codeeinheiten* für ein
oder mehr Unicode-Zeichen handelt, und nicht bloss um Codepunktwerte. Daher
müssen Surrogate Pairs berücksichtigt werden, oder es kommt Müll raus.


X-Post & F'up2 de.comp.unix.shell

Andreas Kohlbach

unread,
Mar 8, 2013, 7:40:32 PM3/8/13
to
Danke dir. Genau was ich suchte. Wäre ich nie drauf gekommen.

Thomas 'PointedEars' Lahn

unread,
Mar 11, 2013, 7:18:23 PM3/11/13
to
Du suchst fhcsale Lösungen?

> Wäre ich nie drauf gekommen.

Ich auch nicht, denn ich bevorzuge richtige Lösungen.
Message has been deleted
0 new messages