HTTP Post File nach RFC1867 mit TCP

  • Guten Tag,
    ich stehe im Moment vor einem Problem. Ich muss einen HTTP Post Request absenden nach RFC 1867. Dieser muss einen Usernamen und Passwort transportieren. Das wichtigste ist aber mit dem HTTP Post muss ein File übertragen werden. Ich habe damit bereits begonnen, leider erhalte ich auf dem Server nach dem Abesenden keine Daten.

    Meine Funktion mit Example bis jetzt. Habe die Webseite zum Veröffentlichen auf ww.example.com geändert.

    Spoiler anzeigen
    [autoit]

    Local $user = "ScreenReaderClient"
    Local $pass =
    Local $file = @ScriptDir & "\img.png"

    [/autoit] [autoit][/autoit] [autoit]

    Func _uploadCaptcha($user, $pass, $file)
    Local $serverIp = TCPNameToIP("www.example.com")
    Local $fileData = ""
    TCPStartup()

    $fileHandle = FileOpen($file, 0)

    [/autoit] [autoit][/autoit] [autoit]

    If $fileHandle = -1 Then
    MsgBox(0, "Error", "Unable to open file.")
    Exit
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    While 1
    $chars = FileRead($fileHandle, 1)
    If @error = -1 Then ExitLoop
    $fileData = $fileData & $chars
    Wend
    ;$fileData = FileRead($fileHandle)
    FileClose($file)

    $sAttachment = 'Content-type: multipart/form-data, boundary=---AaB03x' & @CRLF & @CRLF & _
    '---AaB03x' & @CRLF & _
    'content-disposition: form-data; name="usr"' & @CRLF & @CRLF & _
    $user & @CRLF & _
    'content-disposition: form-data; name="pass"' & @CRLF & @CRLF & _
    $pass & @CRLF & _
    '---AaB03x' & @CRLF & _
    'Content-Disposition: form-data; name="file"; filename="img.png"' & @CRLF & _
    'Content-Type: image/png' & @CRLF & @CRLF & _
    $fileData & @CRLF

    [/autoit] [autoit][/autoit] [autoit]

    $lenght = StringLen($sAttachment)

    $sHeader = "POST /post_debug.php" & @CRLF & _
    "HOST example.com" & @CRLF & _
    "User-Agent: AutoItScreenReader" & @CRLF & _
    "Content-type: multipart/form-data" & @CRLF & _
    "Content-length: " & $lenght & @CRLF & @CRLF

    [/autoit] [autoit][/autoit] [autoit]

    $openSocket = TCPConnect($serverIp,80)
    TCPSend($openSocket, $sHeader & $sAttachment)

    MsgBox(0,".",$sHeader & $sAttachment)
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    _uploadCaptcha($user, $pass , $file)

    [/autoit]

    Zum entwickeln der Funktion verwende ich zur Zeit auf dem Server diese Php Applikation:
    Die Datei log.txt muss vor dem Schrieben schon erstellt sein, nur so zur Info.

    Spoiler anzeigen

    Jetzt noch wozu ich mir denn ganzen Ärger mache. Meine Schwester ist leider seit der Geburt Blind. Leider sind aber ScreenReader zum Lesen von Webseiten je nach Hersteller ziemlich Teuer, meine Schwester Träumt schon länger von einem Hardware ScreenReader. Deshalb habe ich mit ie.au3 einen ScreenReader gemacht welcher zwar auch nur mit bescheidenem Ergebnis vorliest. Auf einer Seite auf der sich meine Schwester schon länger bewegt sind jetzt für das Login Captchas eingebaut worden. Auch nach rücksprache mit dem Admin sollte es nicht möglich sein die Captcha für Ihren Account auszuschalten. Ich lade mir jetzt also die Bilder runter mit den Ie.au3 Funktionen und will sie nun auf meinem Webspace (free hoster) Hochladen. Ich erhalte dann von dem Php Script eine E-Mail, dann brauche ich schnell auf der Webseite das richtige Einzugeben (je nach captcha). Solange meine Schwester die Seite nicht aktualisiert bleibt ja das Bild gleich. Kann leider machmal schon 1-5min Dauern bis ich darauf reagieren kann, ist aber im Moment die einfachste und beste Lösung. Möchte es einfach mit dem Upload via HTTP Post über TCP machen da ich bald im Studium Java lerne und dann die Software auf Java neu machen will und ich da die Ie.au3 nicht mehr haben werde.

    Lange Rede kurzer Sinn, war jetzt schon ca 5h daran finde nur einfach nicht Heraus wiso es nicht Funktioniert. Würde mich natürlich freuen wenn mir wer Helfen kann. Dies kann auch nur in der Form eines Tipps sein.

    Freundlich Grüsst Simon

    Einmal editiert, zuletzt von simonScreenRead (11. Oktober 2008 um 20:22)

  • Hallo!

    Reicht dir evt. _FTPPut mit einem Account z.B. von funpic und _InetSMTPMail mit Account von GMX?

    peethebee

    Mir ist gerade aufgefallen das meine Anfrage für eine Captcha Solution wohl einen Konflikt mit euren Forenregelendarstellt, ihr könnt also das Topic löschen.

    Spoiler anzeigen

    Habe ich mir soweit auch schon überlegt. Im Moment mache ich das ganze einfach mit einem zweiten IE Objekt, welches ein HTML Forumular ausfüllt und übermittelt. Nun möchte ich eigentlich genau das selbe nur eben bereits einen Schritt weiter. Das generieren des Ie Objekts und ausfüllen des Formulars kann ich mir ja eigentlich sparen. Mit Live HTTP Header habe ich mir denn Versendeten String angesehen und dachte eigentlich das es doch möglich sein muss das mehr oder wenger einfach nachzubauen. Für die webübliche Versendung ist ja nicht einmal eine Codierung der binären Bilddaten erforderlich so wie ich das sehe.

    Generell Funktioniert es ja auch, nur möchte ich das ganze etwas vereinfachen und beschleunigen. Aber schonmal Danke für den Lösungsversuch. Sollte es sich als nicht machbar oder zuschwierig erweisen werde ich natürlich das ganze verwerfen.

    edit: Das der Server das Mail Versendet hat eigentlich den Grund das ich den ScreenReader Client nicht verändern muss wenn die E-Mail Adresse wechselt. Tagsüber erhalte ich so die Mail auf meine Webadresse, Abends auf meinen Pop3 Account zuhause. Falls ich dann später evt. noch weitere oder andere E-Mailadressen hätte kann ich ohne eine Anpassung der .exe das auf dem Server beqwem Anpassen.

    2 Mal editiert, zuletzt von simonScreenRead (11. Oktober 2008 um 20:16)