Hallo, ich würde gerne auf den einsatz externer Librarys verzichten (wie z.b. winHTTP) und über TCP ein HTTP package an den Server schicken.
Irgendwo ist jedoch der Wurm drin, ich schätze es liegt an der Übertragung der Datei.
Als einfaches beispiel habe ich einen Imageupload auf 250kb.de vorbereitet.
Hier die Header und Package vom Firefox (funktioniert):
XML: LiveHTTP Header
POST /upload/ HTTP/1.1
Host: 250kb.de
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:39.0) Gecko/20100101 Firefox/39.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: de,en-US;q=0.7,en;q=0.3
Accept-Encoding: gzip, deflate
Referer: http://250kb.de/
Cookie: __utma=177882470.697513179.1423419561.1423419561.1423419561.1; __utmz=177882470.1423419561.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none); PHPSESSID=b9dk8gqdhi5kv9b4n42a8kvr41
Connection: keep-alive
Content-Type: multipart/form-data; boundary=---------------------------4984317889428
Content-Length: 64389
-----------------------------4984317889428
Content-Disposition: form-data; name="file_0"; filename="unbenannt.jpg"
Content-Type: image/jpeg
(inhalt meiner JPG)
-----------------------------4984317889428
Content-Disposition: form-data; name="scaling[0]"
no-scaling
-----------------------------4984317889428
Content-Disposition: form-data; name="duration"
24h
-----------------------------4984317889428
Content-Disposition: form-data; name="acceptTOS"
1
-----------------------------4984317889428
Content-Disposition: form-data; name="upload"
Hochladen
-----------------------------4984317889428--
Alles anzeigen
Hier mein Code:
AutoIt: 250kb.au3
#cs ----------------------------------------------------------------------------
AutoIt Version: 3.3.13.19 (Beta)
Author: myName
Script Function:
Template AutoIt script.
#ce ----------------------------------------------------------------------------
; Script Start - Add your code below here
$file = FileOpenDialog('Select File to upload', "", 'JPG(*.jpg)|JPEG(*.jpeg)|PNG(*.png)|GIF(*.gif)', 3)
If @error Then Exit
$boundary = boundary()
TCPStartup()
$socket = TCPConnect(TCPNameToIP('250kb.de'), 80)
$multipart1 = '-----------------------------' & $boundary & @CRLF & _
'Content-Disposition: form-data; name="file_0"; filename="' & StringRegExpReplace($file, '.+\\', '') & '"' & @CRLF & _
'Content-Type: image/jpeg' & @CRLF & _
'' & @CRLF
$multipart2 = FileRead(FileOpen($file))
$multipart3 = @CRLF & '-----------------------------' & $boundary & @CRLF & _
'Content-Disposition: form-data; name="scaling[0]"' & @CRLF & _
'' & @CRLF & _
'no-scaling' & @CRLF & _
'-----------------------------' & $boundary & @CRLF & _
'Content-Disposition: form-data; name="duration"' & @CRLF & _
'' & @CRLF & _
'24h' & @CRLF & _
'-----------------------------' & $boundary & @CRLF & _
'Content-Disposition: form-data; name="acceptTOS"' & @CRLF & _
'' & @CRLF & _
'1' & @CRLF & _ ; utb
'-----------------------------' & $boundary & @CRLF & _
'Content-Disposition: form-data; name="upload"' & @CRLF & _
'' & @CRLF & _
'Hochladen' & @CRLF & _
'-----------------------------' & $boundary & '--' & @CRLF & _
'' & @CRLF
$packet = 'POST /upload/ HTTP/1.1' & @CRLF & _
'Host: 250kb.de' & @CRLF & _
'User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:39.0) Gecko/20100101 Firefox/39.0' & @CRLF & _
'Referer: http://250kb.de/' & @CRLF & _
'Connection: keep-alive' & @CRLF & _
'Content-Type: multipart/form-data; boundary=---------------------------' & $boundary & @CRLF & _
'Content-Length: ' & StringLen($multipart1) + StringLen($multipart2) + StringLen($multipart3) & @CRLF & @CRLF & $multipart1
$bytes = TCPSend($socket, $packet)
ConsoleWrite($bytes & " / " & StringLen($packet) & " bytes sent" & @CRLF)
$bytes = TCPSend($socket, FileRead($file))
ConsoleWrite($bytes & " / " & StringLen($multipart2) & " bytes sent" & @CRLF)
$bytes = TCPSend($socket, $multipart3)
ConsoleWrite($bytes & " / " & StringLen($multipart3) & " bytes sent" & @CRLF)
$recv = TCPRecv($socket, 1024)
Do
$recv &= TCPRecv($socket, 1024)
Until @error Or StringInStr($recv, '</html>')
FileWrite(FileOpen(@ScriptDir & '\upload.txt', 10), $recv & @CRLF & $packet & "fileread(fileopen($file))" & $multipart3)
TCPCloseSocket($socket)
TCPShutdown()
Func boundary()
Local $rslt = DllCall("msvcrt.dll", "int:cdecl", "time", "int", 0)
If @error = 0 Then Return $rslt[0]
Return -1
EndFunc ;==>boundary
Alles anzeigen
und hier das ergebnis meines tests:
XML: upload.txt
HTTP/1.1 200 OK
Server: nginx
Date: Sun, 19 Jul 2015 19:09:56 GMT
Content-Type: text/html
Transfer-Encoding: chunked
Connection: keep-alive
Vary: Accept-Encoding
Set-Cookie: PHPSESSID=9oci6sdnal6jmi9e31ju3gcb80; path=/
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache
Vary: Accept-Encoding
1bf
<br />
<b>Fatal error</b>: Uncaught exception 'ImagickException' with message 'Unsupported marker type 0x81 `/www/vhosts/250kb.de/htdocs/u/150719/j/Au92TzPyj76l.jpg' @ error/jpeg.c/JPEGErrorHandler/321' in /www/vhosts/250kb.de/htdocs/upload.php:61
Stack trace:
#0 /www/vhosts/250kb.de/htdocs/upload.php(61): Imagick->__construct('/www/vhosts/250...')
#1 {main}
thrown in <b>/www/vhosts/250kb.de/htdocs/upload.php</b> on line <b>61</b><br />
0
POST /upload/ HTTP/1.1
Host: 250kb.de
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:39.0) Gecko/20100101 Firefox/39.0
Referer: http://250kb.de/
Connection: keep-alive
Content-Type: multipart/form-data; boundary=---------------------------1437332996
Content-Length: 52767
-----------------------------1437332996
Content-Disposition: form-data; name="file_0"; filename="unbenannt.jpg"
Content-Type: image/jpeg
(inhalt meiner JPG)
-----------------------------1437332996
Content-Disposition: form-data; name="scaling[0]"
no-scaling
-----------------------------1437332996
Content-Disposition: form-data; name="duration"
24h
-----------------------------1437332996
Content-Disposition: form-data; name="acceptTOS"
1
-----------------------------1437332996
Content-Disposition: form-data; name="upload"
Hochladen
-----------------------------1437332996--
Alles anzeigen
Was natürlich direkt auffällt ist die nicht übereinstimmende Content-Length.
Weiß allerdings nicht wirklich wo mein Problem ist.
Danke im Vorraus.