Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi TIdHTTP und Javascript / Refresh (https://www.delphipraxis.net/71448-tidhttp-und-javascript-refresh.html)

Win32.API 15. Jun 2006 13:10


TIdHTTP und Javascript / Refresh
 
Hi,
unterstuetzt die TIdHTTP Komponente Javascript? :gruebel:

Ich bekomme immer den Fehler (von der Website), dass Javascript ausgeschaltet ist.

Kann man es anschalten, simulieren oder gibt es Alternative Komponenten die das unterstuetzen?

//Edit:


Das Problem ist, das es auf der Website einen Counter gibt, der die Sekunden runter zaehlt. (20,19,18,...) und wenn er bei 0 ist

wird eine andere Website geladen, funktioniert bei dem TWebbrowser auch einwandfrei, aber mit idhttp will es nicht so ganz.

Vieleicht unterstuetzt idhttp ja Javascript, aber es aktuallisiert den Sourcecode nicht.

Gibt es eine Moeglichkeit den Aktuellen Sourcecode von einer Website erneut auszulesen, ohne das man die genaue URL kennt?

Ich sende etwas mit .post() an die Seite und werde weitergeleitet, deswegen ist mit die genaue URL nicht bekannt.




danke & ciao

marabu 15. Jun 2006 16:06

Re: TIdHTTP und Javascript / Refresh
 
Hi,

Zitat:

Zitat von Win32.API
unterstuetzt die TIdHTTP Komponente Javascript?

nein.

Zitat:

Zitat von Win32.API
Kann man es anschalten, simulieren oder gibt es Alternative Komponenten die das unterstuetzen?

bevor du dem Indy HTTP-Client beigebracht hast, wie er mit JavaScript umgehen muss, hast du dein Programm mit der Komponente TWebBrowser realisiert.

Grüße vom marabu

Win32.API 15. Jun 2006 16:38

Re: TIdHTTP und Javascript / Refresh
 
Danke fuer deine Antwort.

Ich habs schon mit dem TWebbrowser realisiert, noch bevor ich mir den Idhttp client angeguckt habe :lol:.

Das Problem ist beim TWebBrowser ist aber, dass der Datei-Download immer von IE(TWebbrowser) ausgefuehrt wird, ich moechte das

gerne manuell machen. Gibt es denn eine Moeglichkeit die download funktion des TWB durch eine eigene zuersetzten?

ciao

marabu 15. Jun 2006 16:48

Re: TIdHTTP und Javascript / Refresh
 
Na klar.

Bei interaktivem Einsatz kannst du im Ereignis OnBeforeNavigate() dazwischenfunken. Ansonsten extrahierst du den benötigten Link und verwendest Indy zum Herunterladen.

marabu

Win32.API 15. Jun 2006 16:53

Re: TIdHTTP und Javascript / Refresh
 
Zitat:

Ansonsten extrahierst du den benötigten Link und verwendest Indy zum Herunterladen.
Habe ich schon probiert, er gibt mir immer den error aus "HTTP/1.1 404 Not Found.", der link stimmt aber.

Zitat:

Bei interaktivem Einsatz kannst du im Ereignis OnBeforeNavigate() dazwischenfunken.
Wie meinst du das mit "dazwischenfunken" ? Hoert sich aber gut an :-D

marabu 15. Jun 2006 16:59

Re: TIdHTTP und Javascript / Refresh
 
Wenn der Download durch einen Klick auf einen Link initiiert wurde, dann kannst du im genannten event handler Cancel auf True setzen und den Download in die eigene Hand nehmen. Ich denke aber, dass du automatisch Laden möchtest, also sollten wir vielleicht lieber den Fehler auf deinem anderen Weg finden.

marabu

Win32.API 15. Jun 2006 17:08

Re: TIdHTTP und Javascript / Refresh
 
Ich denke mal das Problem ist, das die Seite checkt ob der download wirklich auch von dem "downloader" (wb, idhttp) initialisiert

wurde, und wenn nicht wird der download verweigert. Ich habe leider keine Ahnung wie eine Webseite sowas ueberpruefen koennte.

Und wie man der Seite vormachen kann, das der IdHttpClient den download gestartet hat und nicht der WB.

marabu 15. Jun 2006 17:23

Re: TIdHTTP und Javascript / Refresh
 
Vielleicht hast du dich vorher anmelden müssen und es gibt eine session-id die versteckt mitgeführt wird - oder es wurde ein cookie gesetzt - oder es wird der Referer überprüft. Zumindest diese Fälle lassen sich mit Indy behandeln.

marabu

Win32.API 15. Jun 2006 17:39

Re: TIdHTTP und Javascript / Refresh
 
Zitat:

Vielleicht hast du dich vorher anmelden müssen und es gibt eine session-id die versteckt mitgeführt wird - oder es wurde ein cookie gesetzt - oder es wird der Referer überprüft. Zumindest diese Fälle lassen sich mit Indy behandeln.
Angemeldet habe ich mich nicht, ein Cookie wird zwar gesetzt der spielt aber keine Rolle.

Kann man den referer aus einem Wb auslesen? Setzen ist ja mit idhttp kein Problem. // TWebbrowser.OleObject.Document.referrer

Es gibt zwar eine sessionid, die ist aber bei jedem Klick auf den button gleich, sie aender sich nur wenn man erneut die 20

sekunden wartet.



//Edit: Cookie und referrer haben damit nix zu tun. Wie kann man denn die SessionID bei dem Idhttpclient simulieren?

marabu 15. Jun 2006 18:54

Re: TIdHTTP und Javascript / Refresh
 
Die SessionId kann im URL oder als hidden field mitgeführt werden. Wenn du mit FireFox unterwegs bist, dann kannst du recht einfach die page info untersuchen um Hinweise zu erhalten.

marabu

Win32.API 15. Jun 2006 19:11

Re: TIdHTTP und Javascript / Refresh
 
Also die Sid ist in der URL gespeichert, die download URL sieht immer so aus :

Code:
url/files/16980168/1769675284/filename.ext
wobei die erste Zahl abhaenig von dem download ist und die zweite immer neu generiert wird.

Gibt es da eine Moeglichkeit, das zu umgehen, so das der Idhttp client funktioniert?

win32

marabu 15. Jun 2006 19:17

Re: TIdHTTP und Javascript / Refresh
 
Wenn du den deiner Meinung nach korrekten URL per Indy HTTP-Client übermittelst und trotzdem abgewiesen wirst, dann ist der URL allein wohl nicht der Schlüssel zu deinem Glück und du musst etwas tiefer bohren. Vielleicht solltest du eine erfolgreiche Session im Browser einmal mitschneiden und den traffic vergleichen um festzustellen, was schief läuft. Da die Seite nicht öffentlich zu sein scheint, kann ich dir wohl nicht weiter helfen.

marabu

Win32.API 15. Jun 2006 19:26

Re: TIdHTTP und Javascript / Refresh
 
Ok, dann werde ich mal mal ans sniffen machen, die Seite ist oeffentlich, aber ich bin mir nicht ganz sicher ob es so legal ist.

Es geht um rapidshare.de ich versuche den Download vorgang zu automatisieren.

Wenn jemand noch was einfaellt bitte Posten. danke.

marabu 15. Jun 2006 20:50

Re: TIdHTTP und Javascript / Refresh
 
Über die Vorlieben von rapidShare habe ich nichts gelesen, aber die Automatisierung sollte etwa so möglich sein: du nimmst deine Indy HTTP-Client Komponente und lädst per Get() den Download-URL. Anschließend musst du den erhaltenen Code parsen (MSHTML) und den Action-URL extrahieren. Deinen file holst du dann mit Post() und den zusätzlichen Parametern "uri" (hidden) und "dl.start", deren Werte du ebenfalls extrahieren musst.

marabu

Win32.API 15. Jun 2006 21:43

Re: TIdHTTP und Javascript / Refresh
 
Zitat:

Zitat von marabu
Über die Vorlieben von rapidShare habe ich nichts gelesen, aber die Automatisierung sollte etwa so möglich sein: du nimmst deine Indy HTTP-Client Komponente und lädst per Get() den Download-URL. Anschließend musst du den erhaltenen Code parsen (MSHTML) und den Action-URL extrahieren. Deinen file holst du dann mit Post() und den zusätzlichen Parametern "uri" (hidden) und "dl.start", deren Werte du ebenfalls extrahieren musst.

marabu

Danke fuer die Ausfuehrliche anleitung, aber genau da war ich im ersten Post :mrgreen:.

Wenn ich post mit dl.start=1 (klick auf free) an den Rapidshare link sende, komme ich wieder zu meinem

Anfangs Problem : TIdHTTP unterstuetzt kein javascript um dem Countdown auszuwerten ...

Oder verstehe ich dich da falsch? Ich habe hier mal eine datei hochgeladen, da kann man sich den vorgang mal angucken.

(Klick auf Free, Countdown abwarten, Security Code eingeben, Download)

ciao w32

DGL-luke 15. Jun 2006 22:23

Re: TIdHTTP und Javascript / Refresh
 
mal ganz ehrlich: such dir n anderen hoster... wie willst du denn das captcha knacken, wenn du erstmal so weit kommst?


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:24 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz