Fehlerhafter Bilddowload

01/19/2016 14:42 luli-1#1
Hallo Leute,

vlt habt ihr eine Idee:

Ich möchte ganz normal über InetGet($link,"captcha.jpg",0,0)
ein Bild downloaden. Das macht er auch soweit erstellt die Datei. Die Datei ist sogar einige KB groß jedoch kann ich Sie nicht öffnen. Es heißt immer die Datei wäre beschädigt.


Hier der Code:

Code:
InetGet("https://registrierung.web.de/?34-IResourceListener-bodyContainer-brand~container~border-brand~container~border_body-signup~form-form-captchaPanel-captcha~image-captcha~image&antiCache=1453210694582
","captcha.jpg",0,0)
Es hat scheinbar etwas mit dem Cache zutun. Wenn ich entsprechend den Browsercache leere. Funktioniert es genau 1 mal.
01/19/2016 16:38 alpines#2
Es kann sein das das entsprechende Cookie fehlt und er ein altes Captcha laden will und das von web.de verboten wird.
Lade das Bild mit den Cookies über WinHttp runter wenn du die Registrierung über WinHttp abwickelst.
01/20/2016 08:29 luli-1#3
Quote:
Originally Posted by alpines View Post
Es kann sein das das entsprechende Cookie fehlt und er ein altes Captcha laden will und das von web.de verboten wird.
Lade das Bild mit den Cookies über WinHttp runter wenn du die Registrierung über WinHttp abwickelst.
Hallo alpines,

danke für den Tipp. Leider kann ich das nicht über Winhttp abwickeln. Gebt zuviele Porbleme mit Javascript :(

Bin habe keine Ahnung wie ich das jetzt ambesten mache. Möchte nicht dauerhaft den Cache leeren müssen.
01/20/2016 15:54 alpines#4
Wenn du die Datei mit InetGet ziehen kannst dann lad es doch WinHttp runter, das unterstützt auch SSL.
01/21/2016 10:56 luli-1#5
Quote:
Originally Posted by alpines View Post
Wenn du die Datei mit InetGet ziehen kannst dann lad es doch WinHttp runter, das unterstützt auch SSL.
Mit WinHttp kann ich nicht arbeiten. Die Seite erkennt es.

Ob durch Javascript oder irendwas anderes was ich nicht bedachte habe kann ich nicht sagen. User agent usw habe ich richtig gesetzt

InetGet geht einmal sobald die Cookies gesetzt sind hab ich keine Chance mehr.

Sonstiege optionen bietet leider weder die IE.au3 noch die FF.au3 wie ich das sehe :(

Hätte noch die Idee das Bild aus dem Temp-ordner zu holen. Jedoch habe ich keine Ahnugn wie ich die finden soll :(
01/21/2016 18:09 alpines#6
Die Seite erkennt es? Woran soll die Seite WinHttp erkennen? HTTP/HTTPS Transfer findet nach einem Protokoll statt, wenn du das geschickt einsetzt wird dein Http-Handler so ausschauen wie ein Browser.
01/22/2016 10:32 Shadow992#7
Quote:
Originally Posted by luli-1 View Post
Mit WinHttp kann ich nicht arbeiten. Die Seite erkennt es.

Ob durch Javascript oder irendwas anderes was ich nicht bedachte habe kann ich nicht sagen. User agent usw habe ich richtig gesetzt

InetGet geht einmal sobald die Cookies gesetzt sind hab ich keine Chance mehr.

Sonstiege optionen bietet leider weder die IE.au3 noch die FF.au3 wie ich das sehe :(

Hätte noch die Idee das Bild aus dem Temp-ordner zu holen. Jedoch habe ich keine Ahnugn wie ich die finden soll :(
Quote:
Originally Posted by alpines View Post
Die Seite erkennt es? Woran soll die Seite WinHttp erkennen? HTTP/HTTPS Transfer findet nach einem Protokoll statt, wenn du das geschickt einsetzt wird dein Http-Handler so ausschauen wie ein Browser.
Theoretisch wäre es möglich, dass die Seite über WebSockets mit dem Server kommuniziert und einen speziellen Token (nicht über HTTP(s)) an den Server sendet, der mit dem im Request übereinstimmen muss.

Aber um ehrlich zu sein bezweifle ich enorm, dass sich jemand auch nur annähernd diese Arbeit macht. Vielleicht musst du ein paar mehr Requests/Cookies mitsenden, als du es momentan tust. Aber dass die Seite WinHttp erkennt ist mehr als unwahrscheinlich und käme wohl der Wahrscheinlichkeit gleich beim Geschäfte machen vom Blitz getroffen zu werden.

Vor allem in den Zeiten von recaptcha u.ä.
Spontan fällt mir auf:
Stimmt denn dein Wert für "antiCache=1453210694582" im Request? Lässt du das immer auf den aktuellen TimeStamp aktualisieren?
InetGet (wegen JS Ausführung) wird diesen Timestamp wohl richtig setzen (bei einem 2. automatischen Request).

Alles in allem:
Es muss auch über WinHttp gehen!
01/22/2016 20:12 luli-1#8
Quote:
Originally Posted by Shadow992 View Post
Theoretisch wäre es möglich, dass die Seite über WebSockets mit dem Server kommuniziert und einen speziellen Token (nicht über HTTP(s)) an den Server sendet, der mit dem im Request übereinstimmen muss.

Aber um ehrlich zu sein bezweifle ich enorm, dass sich jemand auch nur annähernd diese Arbeit macht. Vielleicht musst du ein paar mehr Requests/Cookies mitsenden, als du es momentan tust. Aber dass die Seite WinHttp erkennt ist mehr als unwahrscheinlich und käme wohl der Wahrscheinlichkeit gleich beim Geschäfte machen vom Blitz getroffen zu werden.

Vor allem in den Zeiten von recaptcha u.ä.
Spontan fällt mir auf:
Stimmt denn dein Wert für "antiCache=1453210694582" im Request? Lässt du das immer auf den aktuellen TimeStamp aktualisieren?
InetGet (wegen JS Ausführung) wird diesen Timestamp wohl richtig setzen (bei einem 2. automatischen Request).

Alles in allem:
Es muss auch über WinHttp gehen!
Naja web.de wird sich schon etwas Mühe machen entsprechen Automatisierungen zu unterbinden :D

Ich bekomme sobald ich einen get request sende die Antwort das die Registrierung nicht möglich ist.

Habe eig. einige Erfahrung mit winhttp und soweit an alles gedacht. (hoffe ich)
an Cookies kann es eig. auch nicht liegen da es auch passiert wenn ich die Seite als aller erstes aufrufe wo noch gar keine Cookies da sein können.

Da ich den aktuellen Link immer auslese setzt sich der Timestamp immer automatisch aktuell.. das kann leider auch nicht sein.

Falls jemand es irgendwie pack [Only registered and activated users can see links. Click Here To Register...] per get() normal aufzurufen wäre mir das auch was wert :)
01/22/2016 23:45 Shadow992#9
Quote:
Originally Posted by luli-1 View Post
Naja web.de wird sich schon etwas Mühe machen entsprechen Automatisierungen zu unterbinden :D

Ich bekomme sobald ich einen get request sende die Antwort das die Registrierung nicht möglich ist.

Habe eig. einige Erfahrung mit winhttp und soweit an alles gedacht. (hoffe ich)
an Cookies kann es eig. auch nicht liegen da es auch passiert wenn ich die Seite als aller erstes aufrufe wo noch gar keine Cookies da sein können.

Da ich den aktuellen Link immer auslese setzt sich der Timestamp immer automatisch aktuell.. das kann leider auch nicht sein.

Falls jemand es irgendwie pack [Only registered and activated users can see links. Click Here To Register...] per get() normal aufzurufen wäre mir das auch was wert :)
Es geht nicht um den Aufwand, der dafür nötig ist, sondern um Aufwand/Nutzen-Verhältnis. Das ist nämlich hundsmiserabel.

Ich weiß nicht was du falsch machst, aber die Seite braucht (bis auf für gewisse User-Interaktionen) keine Javascript und auch das Auslesen der von dir angegebenen Seite klappt mit WinHttp einwandfrei:

PHP Code:
#include "WinHttp.au3"

Opt("MustDeclareVars"1)


Global 
$sDomain "registrierung.web.de"
Global $sPage ""

Initialize and get session handle
Global $hOpen _WinHttpOpen()
Get connection handle
Global $hConnect _WinHttpConnect($hOpen$sDomain)

Make a SimpleSSL request
Global $hRequestSSL _WinHttpSimpleSendSSLRequest($hConnect, Default, $sPage)

Read...
Global 
$sReturned _WinHttpSimpleReadData($hRequestSSL)
Close handles
_WinHttpCloseHandle
($hRequestSSL)
_WinHttpCloseHandle($hConnect)
_WinHttpCloseHandle($hOpen)

See what's returned
ConsoleWrite($sReturned & @CRLF)
MsgBox(64 + 262144, "Done", "Page source is printed to console")