ubuntuusers.de

Http-Request per Shellscript

Status: Ungelöst | Ubuntu-Version: Ubuntu 10.10 (Maverick Meerkat)
Antworten |

sanjin

Anmeldungsdatum:
20. November 2009

Beiträge: 56

Hi Leute, Würde gern per Shellscript eine Sucheanfrage auf ner Website machen und das Resultat dann aufm rechner speichern. Genauer gesagt gehts mir um diese Seite: http://register.dpma.de/DPMAregister/marke/einsteiger Hier würde ich gerne Per shellscript nach: Wiedergabe der Marke = "Aldi" suchen. und das Ergebnis dann als html datei speichern. Jemand ne Ahnung ob das geht und wenn ja könnte mir das jm als Beispielscript coden?

track

Avatar von track

Anmeldungsdatum:
26. Juni 2008

Beiträge: 7174

Wohnort: Wolfen (S-A)

Das sieht nicht ganz so einfach aus.

Bei dieser Seite werden die Suchergebnisse offenbar über Cookies definiert. Das heißt, Du müsstest die Cookies passend erzeugen, und dazu den richtigen Session ID zu Deiner Suchanfrage "erfinden". Also geht das so einfach nicht, Du kannst im Grunde nur die Suchseite passend abschicken und danach die dazu zurückgelieferte Listen-Seite (einschließlich Cookies) abrufen.

So spontan fällt mir dazu nur ein Mausklick-Simulator ein. Sowas hatten wir schon mal z.B. hier: http://forum.ubuntuusers.de/topic/maus-bewegen/
Und zum herunterladen der Antwort dann wget.

LG,

track

Vain

Avatar von Vain

Anmeldungsdatum:
12. April 2008

Beiträge: 2505

Da kommt man auch ohne Mausklick-Simulator weiter, denke ich. Ist eine grauslige Seite, aber da sie bei mir (halbwegs) auch ohne JavaScript und Cookies ging, sollte es mit den Standardtools auch gehen.

Session-ID besorgen und dieses komische lange Teil, was da in „t:formdata“ drinsteht, dann den Request formulieren:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#!/bin/bash

page=$(curl -sL 'http://register.dpma.de/DPMAregister/marke/einsteiger')
formdata=$(echo "$page" | sed -rn 's/.*value="([^"]+)" name="t:formdata".*/\1/p')
session=$(echo "$page" | sed -rn 's/.*jsessionid=([^"]+)".*/\1/p' | head -1)

curl -sL \
	-F "t:formdata=$formdata" \
	-F 'searchType=beginnerNew' \
	-F 'wm=Aldi' \
	-F 'rn=' \
	-F 'bwt=' \
	-F 'inh=' \
	-F 'kla1=' \
	-F 'kla2=' \
	-F 'kla3=' \
	-F 'wbk=' \
	-F 'wdv=' \
	-F 'checkbox=on' \
	-F 'checkbox_0=on' \
	-F 'checkbox_1=on' \
	-F 'sortierSpalte=MarkenIdentifikation' \
	-F 'select=aufsteigend' \
	-F 'trefferProSeite=50' \
	-F 'maxTreffer=500' \
	-F 'str=' \
	-F 'rechercheStarten=Recherche Starten' \
	'http://register.dpma.de/DPMAregister/marke/einsteiger.kopf.form;jsessionid='"$session" > /tmp/foo.htm
firefox /tmp/foo.htm

Keine Ahnung, was du damit vorhast, aber es ist mal ein Anfang.

sanjin

(Themenstarter)

Anmeldungsdatum:
20. November 2009

Beiträge: 56

hi,

danke für die schnelle Antwort, dein Script linkt mich leider auf die falsche Seite. Hab das Script im moment einfach nur rauskopiert. Muss ich noch etwas hinzufügen damit die Suche funktioniert ?

Gruß sanjin

foo.htm (11.0 KiB)
Download foo.htm

track

Avatar von track

Anmeldungsdatum:
26. Juni 2008

Beiträge: 7174

Wohnort: Wolfen (S-A)

Vain:
wie hast Du die Parameter herausgefunden ?

Diese ganzen Parameter für curl fallen ja schließlich nicht aus den Wolken.
Hast Du den Traffic mitgeschnitten und analysiert ?

Was solche http- Kommunikation angeht stehe ich nämlich immer ein bisschen wie die Kuh vor'm neuen Tor ...
(deshalb fiel mir auch nichts besseres als Mausklicker + wget ein)

track

Vain

Avatar von Vain

Anmeldungsdatum:
12. April 2008

Beiträge: 2505

sanjin schrieb:

Muss ich noch etwas hinzufügen damit die Suche funktioniert ?

Eigentlich nicht. Die Seite, die du dort siehst, hatte ich bei meinen Tests aber auch mehrfach gesehen – zum Beispiel dann, wenn $formdata falsch ausgelesen wurde oder so.

Keine Ahnung, ich hab’s nicht bis ins kleinste Detail rekonstruiert. Die Seite ist wirklich garstig. Ich befürchte, du kommst nicht anders an diese Daten heran?

track schrieb:

Vain:
wie hast Du die Parameter herausgefunden ?

Diese ganzen Parameter für curl fallen ja schließlich nicht aus den Wolken.
Hast Du den Traffic mitgeschnitten und analysiert ?

Primär hab ich den Seitenquelltext und das <form>-Element durchgelesen. Schnapp dir mal irgendein HTML-Tutorial und schau dir an, wie Formulare aufgebaut sind, dann erklärt sich das eigentlich recht schnell (action gibt das Ziel an, method die Methode (GET oder POST), die vielen inputs und sonstigen Elemente dann die Parameter). Traffic anschauen schadet aber auch nicht. ☺

Vielleicht reicht das Formular als solches aber doch nicht (oder ich hab einen Fehler drin), sonst würde es bei dir, sanjin, ja gehen. Cookies oder Referer hab ich mir jetzt nicht angeschaut.

track

Avatar von track

Anmeldungsdatum:
26. Juni 2008

Beiträge: 7174

Wohnort: Wolfen (S-A)

Vain: erstmal Danke für den Hinweis auf die "Formulare" ! (Selfhtml kannte ich schon ± grob, "Formulare" noch nicht)

Also, heute Nachmittag hatte ich das soweit rekonstruiert, dass man erstmal die Hauptseite richtig ausfüllen muss.
(MAW: das Formular abschicken)

Dann geht die Listen-Seite auf: http://register.dpma.de/DPMAregister/marke/trefferliste ... und die kann man immer wieder abrufen, solange nur der Cookie "JSESSIONID" noch vorhanden und gültig ist. (also mindestens eine gewisse Zeit lang)

Daraus schließe ich, dass man nach den "Vorbehandlungen" mit Vains Skript wahrscheinlich die Seite auch mit

wget  http://register.dpma.de/DPMAregister/marke/trefferliste

herunterladen können müsste ... (sie steht dann in der Datei trefferliste.html)

track

p.s.:
bei mir funktioiniert das Skript soweit. Die Seite /tmp/foo.htm ist nur roh formatiert (das ist ja klar), aber vollständig (das ist schonmal gut).

sanjin

(Themenstarter)

Anmeldungsdatum:
20. November 2009

Beiträge: 56

hm,

also funktioniert das script bei euch? Wie kann das sein? Muss ich in den Browser Einstellungen noch was ändern?

track

Avatar von track

Anmeldungsdatum:
26. Juni 2008

Beiträge: 7174

Wohnort: Wolfen (S-A)

Hattest Du das Skript komplett markiert, mit der rechten Maustaste "kopiert" und im Editor mit der rechten Maustaste wieder "eingefügt" ?

- Welchen Editor hast Du benutzt ? (nicht womöglich einen unter Win.. ?)
- Hast Du danach mit Rechtsklick - "Eigenschaften" - [Zugriffsrechte] die Datei "ausführbar" gemacht ?
- Wie hast Du das Skript danach aufgerufen ? - im Terminal mit ./dieses_skript oder anders ?

track

diesch Team-Icon

Avatar von diesch

Anmeldungsdatum:
18. Februar 2009

Beiträge: 5072

Wohnort: Brandenburg an der Havel

Oft lässt sich sowas mit Lynx relativ einfach machen. Mit -cmd_log=FILENAME werden alle Tastatureingaben in eine Textdatei geschrieben, die man mit -cmd_script=FILENAME abspielen kann.

Damit muss man sich nicht selbst um Cookies, Formulardaten usw. kümmern, sondern nur den Suchbegriff in die Tastatureingabe-Datei eintragen (und mit lynx umgehen können).

hansmannn

Anmeldungsdatum:
7. April 2011

Beiträge: 30

Wohnort: Niedersachsen

moin, diesch schrieb:

Oft lässt sich sowas mit Lynx relativ einfach machen. Mit -cmd_log=FILENAME werden alle Tastatureingaben in eine Textdatei geschrieben, die man mit -cmd_script=FILENAME abspielen kann.

Damit muss man sich nicht selbst um Cookies, Formulardaten usw. kümmern, sondern nur den Suchbegriff in die Tastatureingabe-Datei eintragen (und mit lynx umgehen können).

Ist ja im prinzip richtig was du da schilders aber ist die suchfunktion auf der seite nicht durch cookies "fixiert" das es genau deswegen funktionier? Ich bin mir nicht ganz sicher, das müsste man echt mal mit Lynx testen denn es könnte sein das durch diese Cookie fixierte suche mit Lynx nicht wirklich weiter kommt.

Wie gesagt ist nur eine vermutung! ein versuch is es definitiev wert

sanjin

(Themenstarter)

Anmeldungsdatum:
20. November 2009

Beiträge: 56

@track ja bin so vorgegangen wie du geschildert hast ;als editior nutze ich vim @diesch werd das mal mit lynx austesten

>also mit lynx funktioniert das soweit, allerdings ist mein ziel mehrere suchanfragen zu schicken, die sich aus irgentwelchen algorithem berechnen lassen. Könnte zwar mit einem script das logfile verändern, aber das wäre ziemlich hässlich. Die Variante mit curl gefällt mir da deutlich besser; funktioniert aber leider nicht. Gruß sanjin

track

Avatar von track

Anmeldungsdatum:
26. Juni 2008

Beiträge: 7174

Wohnort: Wolfen (S-A)

sanjin:
versuchst Du mal, den 2. curl-Befehl im Skript mit einem echo und einem # lahm zu legen ?
Dann wird der gesamte Befehl im Terminal angezeigt:

echo curl -sL \
	-F "t:formdata=$formdata" \
	-F 'searchType=beginnerNew' \
	-F 'wm=Aldi' \
	-F 'rn=' \
	-F 'bwt=' \
	-F 'mf=' \
	-F 'inh=' \
	-F 'kla1=' \
	-F 'kla2=' \
	-F 'kla3=' \
	-F 'wbk=' \
	-F 'wdv=' \
	-F 'checkbox=on' \
	-F 'checkbox_0=on' \
	-F 'checkbox_1=on' \
	-F 'sortierSpalte=MarkenIdentifikation' \
	-F 'select=aufsteigend' \
	-F 'trefferProSeite=50' \
	-F 'maxTreffer=500' \
	-F 'str=' \
	-F 'rechercheStarten=Recherche Starten' \
	'http://register.dpma.de/DPMAregister/marke/einsteiger.kopf.form;jsessionid='"$session" # > /tmp/foo.htm

Kopierst Du das ganze, was dann im Terminal erscheint und postest es mal hier ?
Vielleicht finden wir dann den Fehler.

track

sanjin

(Themenstarter)

Anmeldungsdatum:
20. November 2009

Beiträge: 56

folgendes liefert der Befehl

curl -sL -sLF t:formdata=H4sIAAAAAAAAANWYTWjUQBTHp6212lYs2g8QDyL10EPTbrfb1qrIYq0Uay2NVrwok+QlO24yE2dmu6uCZw/evQmCNz+u3u1BevGieBe8CqLgScFJsx+VNgvZDYUcFibv4
/8ev3mZHfL6O+ouD6HjHuZFmLhMqJBAHODzZU9wlGPc0bCPzQJoEvsgJH+Q00zGwSWGZmABWt5QRmzKRQKuNaqDLPlnbm72fR368KcTdSyjPpNRyZm7gj2Q6NjyPbyBJ1xMnQldckKdcxVfos6yF9
1EPm4Tq5yZIIReMjwiBGF08601bf9+/rEToYq/ZyFOxX30GCHVCqcREUFAd3kYDe7yGWVZS+9S66iYUGAvcc+ul/fsiIjo8oQW6uXVOiomFBhBQ7ucRRdnagoHgofIqKYaUzs1piKjmmpkd2pkI6OiYZSNYh2GWkfFNBGwNhoC1kZUTCiQQRO7nJKDbQN3
iTJAxQcuocioTRzNZcxXA601HWiTeT6jQKXQllX8aG78+t
aXMfRoK5zefaiYuf3tzS/73acXbVRciVVxTfmVS5dYwiJnnh48WZdcokLWsVuC8WfvPz9Bp
/5Wj5SGI9iGjuAI6V9QudRQQpha5RzKxuhZNWkWDVap7fuhmqFFnX2bjemfvj12ZfjVxZZ3Kmj1pESD14I8umQpbWKTIpbq2GyTYm
/NcHdynzkGeafboDEQ0rhFwALuYAMSI5FJGYnekITNuJcYg6mUMei56mIhILnXIZsyAP35ojpaH5aSOFobFKZTRqE3Tz11uwSJncQY5FLG4MQN7CwAV3nquu2UqLNE18AJcnhiTGZSxmQkZLIOnAX

hVLrELCg0iQGZTRmQniVaUP+ZyU3EXMoAHFazoCKTfCnOpgVB3BvszOTAj7k7L59eCG+w82guRkXBuCTAhY9dCTVoR6pWfdvajmIIL4sycQTABbP+NeBg+NiSRlj9PJqPkVn1+JwJIA0kR6v2Vc70

wN6eatjYLMrFkPBwpeqsz7Yy3QhNLWuFnUwiLQ5cWW+hS63jZ4dF9xorDmrmufqpixIP7kocBEjtfzPUvzQN1B166GhHdLurfzG31wbNEwAA -F searchType=beginnerNew -F wm=Aldiwm 
-F rn= -F bwt= -F inh= -F kla1= -F kla2= -wmF kla3= -F wbk= -F wdv= -F checkbox=on -F checkbox_0=on -F checkbox_1=on -F 
sortierSpalte=MarkenIdentifikationsortierSpalte -F select=aufsteigend -F trefferProSeite=50 -F maxTreffer=500 -F str= -F rechercheStarten=Recherche
 Starten http://register.dpma.de/DPMAregister/marke/trefferliste.kopf.form;jsessionid=DD852956A66E46B508A9C70DF4C25108.reg-app02

track

Avatar von track

Anmeldungsdatum:
26. Juni 2008

Beiträge: 7174

Wohnort: Wolfen (S-A)

Da ist ja einiges drin was da nicht hin gehört:

curl -sL -sLF t:formdata=H4sIAAAAAAAAANWYTWjUQBTHp6212lYs2g8QDyL10EPTbrfb1qrIYq0Uay2NVrwok+QlO24yE2dmu6uCZw/evQmCNz+u3u1BevGieBe8CqLgScFJsx+VNgvZDYUcFibv4 
/8ev3mZHfL6O+ouD6HjHuZFmLhMqJBAHODzZU9wlGPc0bCPzQJoEvsgJH+Q00zGwSWGZmABWt5QRmzKRQKuNaqDLPlnbm72fR368KcTdSyjPpNRyZm7gj2Q6NjyPbyBJ1xMnQldckKdcxVfos6yF9 
1EPm4Tq5yZIIReMjwiBGF08601bf9+/rEToYq/ZyFOxX30GCHVCqcREUFAd3kYDe7yGWVZS+9S66iYUGAvcc+ul/fsiIjo8oQW6uXVOiomFBhBQ7ucRRdnagoHgofIqKYaUzs1piKjmmpkd2pkI6OiYZSNYh2GWkfFNBGwNhoC1kZUTCiQQRO7nJKDbQN3 
iTJAxQcuocioTRzNZcxXA601HWiTeT6jQKXQllX8aG78+t 
aXMfRoK5zefaiYuf3tzS/73acXbVRciVVxTfmVS5dYwiJnnh48WZdcokLWsVuC8WfvPz9Bp 
/5Wj5SGI9iGjuAI6V9QudRQQpha5RzKxuhZNWkWDVap7fuhmqFFnX2bjemfvj12ZfjVxZZ3Kmj1pESD14I8umQpbWKTIpbq2GyTYm 
/NcHdynzkGeafboDEQ0rhFwALuYAMSI5FJGYnekITNuJcYg6mUMei56mIhILnXIZsyAP35ojpaH5aSOFobFKZTRqE3Tz11uwSJncQY5FLG4MQN7CwAV3nquu2UqLNE18AJcnhiTGZSxmQkZLIOnAX 
 
hVLrELCg0iQGZTRmQniVaUP+ZyU3EXMoAHFazoCKTfCnOpgVB3BvszOTAj7k7L59eCG+w82guRkXBuCTAhY9dCTVoR6pWfdvajmIIL4sycQTABbP+NeBg+NiSRlj9PJqPkVn1+JwJIA0kR6v2Vc70 
 
wN6eatjYLMrFkPBwpeqsz7Yy3QhNLWuFnUwiLQ5cWW+hS63jZ4dF9xorDmrmufqpixIP7kocBEjtfzPUvzQN1B166GhHdLurfzG31wbNEwAA -F searchType=beginnerNew -F wm=Aldiwm 
-F rn= -F bwt= -F inh= -F kla1= -F kla2= -wmF kla3= -F wbk= -F wdv= -F checkbox=on -F checkbox_0=on -F checkbox_1=on -F 
sortierSpalte=MarkenIdentifikationsortierSpalte -F select=aufsteigend -F trefferProSeite=50 -F maxTreffer=500 -F str= -F rechercheStarten=Recherche
 Starten http://register.dpma.de/DPMAregister/marke/trefferliste.kopf.form;jsessionid=DD852956A66E46B508A9C70DF4C25108.reg-app02

Klar antwortet er auf sowas mit einem Fehler. Jetzt ist natürlich die Frage, woher der Unsinn kommt.
- Du hattest das Skript von Vain wirklich mit "kopieren - einfügen" übernommen und dabei einen normalen Linux-Editor benutzt ?
- Wenn ja, welche Version von sed benutzt Du ? - was sagt sed --version bei Dir (bei mir ist es GNU sed-Version 4.2.1)

Irgendwas geht da übel schief, aber ich sehe noch nicht was. Womöglich hattest Du die Skriptdatei doch mal mit einem Win..-Editor bearbeitet, dass da [CR]-Zeilenden hinein geraten sind ...?

track

Antworten |