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
Local $user = "ScreenReaderClient"
Local $pass =
Local $file = @ScriptDir & "\img.png"
Func _uploadCaptcha($user, $pass, $file)
Local $serverIp = TCPNameToIP("www.example.com")
Local $fileData = ""
TCPStartup()
$fileHandle = FileOpen($file, 0)
If $fileHandle = -1 Then
MsgBox(0, "Error", "Unable to open file.")
Exit
EndIf
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
$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
$openSocket = TCPConnect($serverIp,80)
TCPSend($openSocket, $sHeader & $sAttachment)
MsgBox(0,".",$sHeader & $sAttachment)
EndFunc
_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
<?php
$data = '';
foreach($_POST AS $key => $value)
{
$data .= "" . $key . " : " . $value . "\r\n";
}
$filename = 'log.txt';
if (is_writable($filename)) {
if (!$handle = fopen($filename, "a")) {
print "Kann die Datei $filename nicht öffnen";
exit;
}
if (!fwrite($handle, $data)) {
print "Kann in die Datei $filename nicht schreiben";
exit;
}
fclose($handle);
}
?>
Alles 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