Что нового

[Сеть, интернет] Отправка файла через HTTP

Kap

Новичок
Сообщения
8
Репутация
0
Здравствуйте,

столкнулся с проблемой, файл никак не хочется отправляться

Код:
$filename = 'words3.rar';
$host = "хост";
$fileopen = FileOpen($filename,16)
$fileread = ""
While 1
    $t = FileRead($fileopen, 1)
    If @error Then ExitLoop
    If $t <> 0x00 Then $fileread &= BinaryToString($t)
WEnd
FileClose($fileopen)

;~ MsgBox(64,"asdasd",$fileread)
;~ ConsoleWrite($fileread & @LF)
$boundary = "------"&Chr(Random(Asc("A"), Asc("Z"), 3))&Chr(Random(Asc("a"), Asc("z"), 3))&Chr(Random(Asc("A"), Asc("Z"), 3))&Chr(Random(Asc("a"), Asc("z"), 3))&Random(1, 9, 1)&Random(1, 9, 1)&Random(1, 9, 1)

$oHTTP = ObjCreate("WinHttp.WinHttpRequest.5.1")
$oHTTP.Open("POST", "http://" & $host & "/do.php")
$oHTTP.setTimeouts(5000, 5000, 15000, 15000)
$oHTTP.SetRequestHeader("Accept", "application/msword, image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, */*")
$oHTTP.SetRequestHeader("Proxy-Connection", "Keep-alive")
$oHTTP.SetRequestHeader("Accept-Language", "ru")
$oHTTP.SetRequestHeader("Content-Type", "multipart/form-data; boundary="&$boundary)

$data="--"&$boundary& @CRLF & _
'Content-Disposition: form-data; name="file"; filename="'&$filename&'"'& @CRLF & _
'Content-Type: application/x-rar-compressed'&@CRLF&@CRLF& _
$fileread & @CRLF & _
"--"&$boundary&"--"
Dim $datasize = StringLen($data)

$oHTTP.SetRequestHeader("Host", $host)
$oHTTP.SetRequestHeader("Content-Length", $datasize)
$oHTTP.SetRequestHeader("Pragma", "no-cache")

ConsoleWrite($data & @LF)
$oHTTP.Send($data)
$oHTTP.WaitForResponse
If @error Then
    ConsoleWrite('Error' & @LF)
   Return 0
EndIf
$resp= $oHTTP.Responsetext
$head= $oHTTP.GetAllResponseHeaders
ConsoleWrite($head & @LF)
if StringInStr($resp,'Файл не закачался')then ConsoleWrite('NotUploaded'&@LF)
MsgBox(64,"asdasd",$resp)


php пишет что массив $_FILES пуст, если простой текст отправлять то все окей
наверно, проблема в интерпретации бинарного файла как текста

Помогите пжалста,
Спасибо
 

Redline

AutoIT Гуру
Сообщения
506
Репутация
375
Попробуй так:
Код:
$sFile = @ScriptDir & '\list.zip' ; имя файла, если файл лежит рядом со скриптом, то можно указывать только название
$sHost = 'localhost' ; адрес без префикса http://
$sPHP = '/upload.php' ; имя скрипта загрузки из формы "form action=upload.php"
$sNameOfFileInForm = 'uploadfile' ; наименование файла в форме "input type=file name=uploadfile"
Up($sFile, $sHost, $sPHP, $sNameOfFileInForm)

Func Up($sFileIn, $sHostIn, $sPHPIn, $sNameOfFileInFormIn)
	Local $hFileOpen, $sFileRead, $sBoundary, $sData, $iDatasize, $sHeader, $sCommand, $socket, $sResive
	$hFileOpen = FileOpen($sFile)
	$sFileRead = FileRead($hFileOpen)
	FileClose($hFileOpen)
	$sBoundary = StringFormat('----------------%s%s%smzF', @MIN, @HOUR, @SEC)

	$sData = '--' & $sBoundary & @CRLF & _
				'Content-Disposition: form-data; name="' & $sNameOfFileInFormIn & '"; filename="' & StringRegExpReplace($sFile, '^.*\\', '') & '"' & @CRLF & @CRLF & _
				$sFileRead & @CRLF & '--' & $sBoundary & '--' & @CRLF

	$iDataSize = StringLen($sData)
	ConsoleWrite('SIZE: ' & $iDatasize & @CRLF)

	$sHeader = 'POST http://' & $sHostIn & $sPHPIn & ' HTTP/1.1' & @CRLF & _
				'Host: ' & $sHostIn & @CRLF & _
				'Content-Type: multipart/form-data; boundary=' & $sBoundary & @CRLF & _
				'Content-Length: ' & $iDataSize & @CRLF & '' & @CRLF

	$sCommand = $sHeader & $sData
	ConsoleWrite('COMMAND: ' & @CRLF & $sCommand & @CRLF)
	TCPStartup()
	$socket = TCPConnect(TCPNameToIP($sHostIn), 80)
	TCPSend($socket, $sCommand)
	While 1
		$sResive = TCPRecv($socket, 2000)
		If StringLen($sResive) <> 0 Then
			ConsoleWrite($sResive & @CRLF)
			ExitLoop
		EndIf
		Sleep(50)
	WEnd
	TCPShutdown()
EndFunc   ;==>Up
Возможно понадобиться задать остальные заголовки - по типу "Имя: Значение", я оставил только необходимые.
[box title=TitleBox]Всем кто пробовал раньше отправлять файлы через WinHttp.WinHttpRequest/POST:
Посмотрите сниффером какой размер контента выставлен в скрипте и какой отослан на сервер ($oHTTP.SetRequestHeader("Content-Length", $datasize)) - у меня они разнятся и думаю в этом причина некорректной работы WinHttp
[/box]
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
Redline
Что то у меня не получается использовать это. Хочу залить на imageshack.us, вот так:

Код:
$sFile = @SystemDir & '\oobe\images\merlin.gif' ; имя файла, если файл лежит рядом со скриптом, то можно указывать только название
$sHost = 'www.imageshack.us' ; адрес без префикса http://
$sPHP = '/upload_api.php' ; имя скрипта загрузки из формы "form action=upload.php"
$sNameOfFileInForm = 'fileupload' ; наименование файла в форме "input type=file name=uploadfile"
Up($sFile, $sHost, $sPHP, $sNameOfFileInForm)


Данные точные, т.к у меня есть dll которая заливает без роблем с этими параметрами.
Вот что возвращает :

Код:
HTTP/1.1 200 OK
Server: nginx/0.8.37
Date: Fri, 22 Jul 2011 11:32:20 GMT
Content-Type: text/xml
Transfer-Encoding: chunked
Connection: keep-alive
X-Powered-By: PHP/5.2.9
Set-Cookie: latest=img195; expires=Mon, 16-Jul-2012 11:32:20 GMT; path=/; domain=.imageshack.us

63
<links>
<error id="wrong_file_type">Wrong file type detected for file merlin.gif:</error>
</links>

0

P.S
Я уже несколько лет пытаюсь с помощью AutoIt залить файл на какой нибудь online сервис, пока безуспешно :smile:
 

Redline

AutoIT Гуру
Сообщения
506
Репутация
375
CreatoR
Этот скрипт проверил только на своем серваке (localhost) все прекрасно работает - потому как никаких проверок нету. Для каждого сайта придется допиливать.
Вот для imageshak.us :ninja: (пробовал только png/jpg/gif, и фильтр сделал под них. gif загрузился со второй попытки :scratch:)
Код:
$sFile = @ScriptDir & '\01.png' ; имя файла, если файл лежит рядом со скриптом, то можно указывать только название
$sHost = 'www.imageshack.us' ; адрес без префикса http://
$sPHP = '/upload_api.php' ; имя скрипта загрузки из формы "form action=upload.php"
$sNameOfFileInForm = 'fileupload' ; наименование файла в форме "input type=file name=uploadfile"
Up($sFile, $sHost, $sPHP, $sNameOfFileInForm)

Func Up($sFileIn, $sHostIn, $sPHPIn, $sNameOfFileInFormIn)
    Local $hFileOpen, $sFileRead, $sBoundary, $sData, $iDatasize, $sHeader, $sCommand, $socket, $sResive, $sExtFile, $sFileType = 'bmp'
    $hFileOpen = FileOpen($sFile)
    $sFileRead = FileRead($hFileOpen)
	$sExtFile = StringRegExpReplace($sNameOfFileInFormIn, '^.*\.', '')
	Switch $sExtFile
		Case 'jpeg' Or 'jpg'
			$sFileType = 'jpeg'
		Case 'gif'
			$sFileType = 'gif'
		Case 'png'
			$sFileType = 'png'
	EndSwitch
    FileClose($hFileOpen)
    $sBoundary = StringFormat('----------------%s%s%smzF', @MIN, @HOUR, @SEC)

    $sData = '--' & $sBoundary & @CRLF & _
                'Content-Disposition: form-data; name="' & $sNameOfFileInFormIn & '"; filename="' & StringRegExpReplace($sFile, '^.*\\', '') & '"' & @CRLF & _
				'Content-Type: image/' & $sFileType & @CRLF & @CRLF & _
                $sFileRead & @CRLF & '--' & $sBoundary & '--' & @CRLF

    $iDataSize = StringLen($sData)
    ConsoleWrite('SIZE: ' & $iDatasize & @CRLF)

    $sHeader = 'POST ' & $sPHPIn & ' HTTP/1.1' & @CRLF & _
                'Host: ' & $sHostIn & @CRLF & _
				'Connection: close' & @CRLF & _
                'Content-Type: multipart/form-data; boundary=' & $sBoundary & @CRLF & _
                'Content-Length: ' & $iDataSize & @CRLF & @CRLF

    $sCommand = $sHeader & $sData
    ConsoleWrite('COMMAND: ' & @CRLF & $sCommand & @CRLF)
    TCPStartup()
    $socket = TCPConnect(TCPNameToIP($sHostIn), 80)
    TCPSend($socket, $sCommand)
    While 1
        $sResive = TCPRecv($socket, 20000)
        If StringLen($sResive) <> 0 Then
            ConsoleWrite($sResive & @CRLF)
			ExitLoop
        EndIf
        Sleep(50)
    WEnd
    TCPShutdown()
EndFunc   ;==>Up


Добавлено:
Сообщение автоматически объединено:

Тот же пример на объекте WinHttp:
Код:
$sFile = @ScriptDir & '\apc_logo.jpg' ; имя файла, если файл лежит рядом со скриптом, то можно указывать только название
$sHost = 'www.imageshack.us' ; адрес без префикса http://
$sPHP = '/upload_api.php' ; имя скрипта загрузки из формы "form action=upload.php"
$sNameOfFileInForm = 'fileupload' ; наименование файла в форме "input type=file name=uploadfile"
Up($sFile, $sHost, $sPHP, $sNameOfFileInForm)

Func Up($sFileIn, $sHostIn, $sPHPIn, $sNameOfFileInFormIn)
	Local $hFileOpen, $sFileRead, $sBoundary, $sData, $iDatasize, $sHeader, $sCommand, $socket, $sResive, $sExtFile, $sFileType = 'bmp'

	$hFileOpen = FileOpen($sFile)
    $sFileRead = FileRead($hFileOpen)
	$sExtFile = StringRegExpReplace($sNameOfFileInFormIn, '^.*\.', '')
	Switch $sExtFile
		Case 'jpeg' Or 'jpg'
			$sFileType = 'jpeg'
		Case 'gif'
			$sFileType = 'gif'
		Case 'png'
			$sFileType = 'png'
	EndSwitch
    FileClose($hFileOpen)
    $sBoundary = StringFormat('----------------%s%s%smzF', @MIN, @HOUR, @SEC)

	$oHTTP = ObjCreate('WinHttp.WinHttpRequest.5.1')
	$oHTTP.Open('POST', 'http://' & $sHostIn & $sPHPIn)
	$oHTTP.setTimeouts(5000, 5000, 15000, 15000)
	$oHTTP.SetRequestHeader('Host', $sHostIn)
	$oHTTP.SetRequestHeader('Connection', 'close')
	$oHTTP.SetRequestHeader('Content-Type', 'multipart/form-data; boundary=' & $sBoundary)

	$sData = '--' & $sBoundary & @CRLF & _
                'Content-Disposition: form-data; name="' & $sNameOfFileInFormIn & '"; filename="' & StringRegExpReplace($sFile, '^.*\\', '') & '"' & @CRLF & _
				'Content-Type: image/' & $sFileType & @CRLF & @CRLF & _
                $sFileRead & @CRLF & '--' & $sBoundary & '--' & @CRLF

	$iDataSize = StringLen($sData)
    ConsoleWrite('SIZE: ' & $iDatasize & @CRLF)

	$oHTTP.SetRequestHeader('Content-Length', $iDataSize)

	ConsoleWrite('DATA: ' & $sData & @CRLF)
	$oHTTP.Send($sData)
	$oHTTP.WaitForResponse

	$sResp = $oHTTP.Responsetext
	$sHead = $oHTTP.GetAllResponseHeaders
	ConsoleWrite('HEAD: ' & $sHead & @LF)
	ConsoleWrite('RESPONSE: ' & $sResp & @CRLF)
EndFunc   ;==>Up
не работает, потому что заголовок Content-length выставляется самим объектом независимо от того, что там указывать (можно вообще его не указывать - он сам высчитывается и ставится) :(
Код:
Заголовок первого примера: 
POST /upload_api.php HTTP/1.1
Host: www.imageshack.us
Connection: close
Content-Type: multipart/form-data; boundary=----------------371448mzF
Content-Length: 15340


Заголовок второго примера:
POST /upload_api.php HTTP/1.1
Connection: close
Content-Type: multipart/form-data; boundary=----------------371414mzF
Accept: */*
Host: www.imageshack.us
User-Agent: Mozilla/4.0 (compatible; Win32; WinHttp.WinHttpRequest.5)
Content-Length: 141
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
Redline
Ищу кнопку «Супер полезное сообщение»!!!

Спасибо, работает.
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
Код для загрузки на imageshack.us и на turboupload.com:
Код:
#include <Array.au3>

$sFile = @SystemDir & '\oobe\images\merlin.gif'

_UploadTo_Imageshack($sFile)
_UploadTo_Turboupload($sFile)

Func _UploadTo_Imageshack($sFile, $iRet_Type = 0)
	$sLocalFile = $sFile ;Имя локального файла
	$sHost = 'http://imageshack.us' ;Адрес страницы загрузки
	$sFormAction = '/upload_api.php' ;Действие формы загрузки (из формы "form action=...upload.php)"
	$sFormName = 'fileupload' ;Имя формы загрузки ("input name=uploadfile")
	
	$sResponse = _TCPFileUpload($sLocalFile, $sHost, $sFormAction, $sFormName)
	
	Local $aRet[4] = _
		[ _
			StringRegExpReplace($sResponse, '(?is).*<(image_link)>(.*?)</\1>.*', '\2'), _
			StringRegExpReplace($sResponse, '(?is).*<(image_html)>(.*?)</\1>.*', '\2'), _
			StringRegExpReplace($sResponse, '(?is).*<(image_bb)>(.*?)</\1>.*', '\2'), _
			StringRegExpReplace($sResponse, '(?is).*<(image_bb2)>(.*?)</\1>.*', '\2') _
		]
	
	_ArrayDisplay($aRet)
	If $iRet_Type < 0 Or $iRet_Type > 3 Then $iRet_Type = 0
	
	InputBox('Result - _UploadToImageShack', 'Show the image?', $aRet[$iRet_Type])
	If Not @error Then ShellExecute($aRet[$iRet_Type])
EndFunc

Func _UploadTo_Turboupload($sFile)
	$sLocalFile = $sFile ;Имя локального файла
	$sHost = 'http://turboupload.com' ;Адрес страницы загрузки
	$sFormAction = '/cgi-bin/upload.cgi?upload_id=' ;Действие формы загрузки (из формы "form action=...upload.php)"
	$sFormName = 'file_1' ;Имя формы загрузки ("input name=uploadfile")
	
	$sResponse = _TCPFileUpload($sLocalFile, $sHost, $sFormAction, $sFormName)
	
	$sLocation = StringRegExpReplace($sResponse, '(?is).*?Location: ([^\r\n]*)\r\n.*', '\1')
	$sResponse = BinaryToString(InetRead($sLocation, 1))
	$sResponse = StringRegExpReplace($sResponse, '(?is).*<h2>Code for forums</h2>\s*<textarea [^\r\n]*>([^\r\n]*)</textarea>.*', '\1')
	
	ConsoleWrite($sResponse & @LF)
EndFunc

Доработанная функция:
Код:
Func _TCPFileUpload($sLocalFile, $sHost, $sFormAction, $sFormName)
	Local $sFileRead, $sFileType, $sBoundary, $sData, $iDataSize, $sHeader, $sCommand, $iSocket, $sRecv
	
	$sHost = StringRegExpReplace($sHost, '(?i)^https?://', '')
	
	$sFileRead = FileRead($sLocalFile)
	$sFileType = StringRegExpReplace($sLocalFile, '^.*\.', '')
	If $sFileType = 'jpg' Then $sFileType = 'jpeg'
	
	$sBoundary = StringFormat('----------------%s%s%smzF', @MIN, @HOUR, @SEC)
	
	$sData = '--' & $sBoundary & @CRLF & _
		'Content-Disposition: form-data; name="' & $sFormName & '"; filename="' & StringRegExpReplace($sLocalFile, '^.*\\', '') & '"' & @CRLF & _
		'Content-Type: image/' & $sFileType & @CRLF & @CRLF & _
		$sFileRead & @CRLF & '--' & $sBoundary & '--' & @CRLF
	
	$iDataSize = StringLen($sData)
	
	$sHeader = 'POST ' & $sFormAction & ' HTTP/1.1' & @CRLF & _
				'Host: ' & $sHost & @CRLF & _
				'Connection: close' & @CRLF & _
				'Content-Type: multipart/form-data; boundary=' & $sBoundary & @CRLF & _
				'Content-Length: ' & $iDataSize & @CRLF & @CRLF
	
	$sCommand = $sHeader & $sData
	
	TCPStartup()
	$iSocket = TCPConnect(TCPNameToIP($sHost), 80)
	TCPSend($iSocket, $sCommand)
	
	While 1
		$sRecv &= TCPRecv($iSocket, 20000)
		If StringLen($sRecv) <> 0 Then ExitLoop
		Sleep(50)
	WEnd
	
	TCPShutdown()
	Return $sRecv
EndFunc
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
А вот так получаем корректный FileType (вернее Mime-type):

Код:
Func _TCPGetMIMEType($sFileName)
	Local $sMIMEAssocString = ";ai|application/postscript;aif|audio/x-aiff;aifc|audio/x-aiff;aiff|audio/x-aiff;asc|text/plain;atom|application/atom+xml;au|audio/basic;avi|video/x-msvideo;bcpio|application/x-bcpio;bin|application/octet-stream;bmp|image/bmp;cdf|application/x-netcdf;cgm|image/cgm;class|application/octet-stream;cpio|application/x-cpio;cpt|application/mac-compactpro;csh|application/x-csh;css|text/css;dcr|application/x-director;dif|video/x-dv;dir|application/x-director;djv|image/vnd.djvu;djvu|image/vnd.djvu;dll|application/octet-stream;dmg|application/octet-stream;dms|application/octet-stream;doc|application/msword;dtd|application/xml-dtd;dv|video/x-dv;dvi|application/x-dvi;dxr|application/x-director;eps|application/postscript;etx|text/x-setext;exe|application/octet-stream;ez|application/andrew-inset;gif|image/gif;gram|application/srgs;grxml|application/srgs+xml;gtar|application/x-gtar;hdf|application/x-hdf;hqx|application/mac-binhex40;htm|text/html;html|text/html;ice|x-conference/x-cooltalk;ico|image/x-icon;ics|text/calendar;ief|image/ief;ifb|text/calendar;iges|model/iges;igs|model/iges;jnlp|application/x-java-jnlp-file;jp2|image/jp2;jpe|image/jpeg;jpeg|image/jpeg;jpg|image/jpeg;js|application/x-javascript;kar|audio/midi;latex|application/x-latex;lha|application/octet-stream;lzh|application/octet-stream;m3u|audio/x-mpegurl;m4a|audio/mp4a-latm;m4b|audio/mp4a-latm;m4p|audio/mp4a-latm;m4u|video/vnd.mpegurl;m4v|video/x-m4v;mac|image/x-macpaint;man|application/x-troff-man;mathml|application/mathml+xml;me|application/x-troff-me;mesh|model/mesh;mid|audio/midi;midi|audio/midi;mif|application/vnd.mif;mov|video/quicktime;movie|video/x-sgi-movie;mp2|audio/mpeg;mp3|audio/mpeg;mp4|video/mp4;mpe|video/mpeg;mpeg|video/mpeg;mpg|video/mpeg;mpga|audio/mpeg;ms|application/x-troff-ms;msh|model/mesh;mxu|video/vnd.mpegurl;nc|application/x-netcdf;oda|application/oda;ogg|application/ogg;pbm|image/x-portable-bitmap;pct|image/pict;pdb|chemical/x-pdb;pdf|application/pdf;pgm|image/x-portable-graymap;pgn|application/x-chess-pgn;pic|image/pict;pict|image/pict;png|image/png;pnm|image/x-portable-anymap;pnt|image/x-macpaint;pntg|image/x-macpaint;ppm|image/x-portable-pixmap;ppt|application/vnd.ms-powerpoint;ps|application/postscript;qt|video/quicktime;qti|image/x-quicktime;qtif|image/x-quicktime;ra|audio/x-pn-realaudio;ram|audio/x-pn-realaudio;ras|image/x-cmu-raster;rdf|application/rdf+xml;rgb|image/x-rgb;rm|application/vnd.rn-realmedia;roff|application/x-troff;rtf|text/rtf;rtx|text/richtext;sgm|text/sgml;sgml|text/sgml;sh|application/x-sh;shar|application/x-shar;silo|model/mesh;sit|application/x-stuffit;skd|application/x-koan;skm|application/x-koan;skp|application/x-koan;skt|application/x-koan;smi|application/smil;smil|application/smil;snd|audio/basic;so|application/octet-stream;spl|application/x-futuresplash;src|application/x-wais-source;sv4cpio|application/x-sv4cpio;sv4crc|application/x-sv4crc;svg|image/svg+xml;swf|application/x-shockwave-flash;t|application/x-troff;tar|application/x-tar;tcl|application/x-tcl;tex|application/x-tex;texi|application/x-texinfo;texinfo|application/x-texinfo;tif|image/tiff;tiff|image/tiff;tr|application/x-troff;tsv|text/tab-separated-values;txt|text/plain;ustar|application/x-ustar;vcd|application/x-cdlink;vrml|model/vrml;vxml|application/voicexml+xml;wav|audio/x-wav;wbmp|image/vnd.wap.wbmp;wbmxl|application/vnd.wap.wbxml;wml|text/vnd.wap.wml;wmlc|application/vnd.wap.wmlc;wmls|text/vnd.wap.wmlscript;wmlsc|application/vnd.wap.wmlscriptc;wrl|model/vrml;xbm|image/x-xbitmap;xht|application/xhtml+xml;xhtml|application/xhtml+xml;xls|application/vnd.ms-excel;xml|application/xml;xpm|image/x-xpixmap;xsl|application/xml;xslt|application/xslt+xml;xul|application/vnd.mozilla.xul+xml;xwd|image/x-xwindowdump;xyz|chemical/x-xyz;zip|application/zip;"
	
	Local $aArray = StringRegExp($sMIMEAssocString, "(?i)\Q;" & StringRegExpReplace($sFileName, ".*\.", "") & "\E\|(.*?);", 3)
	If @error Then Return "application/octet-stream"
	Return $aArray[0]
EndFunc
 

armenxxx1

Продвинутый
Сообщения
155
Репутация
56

Jan-Jak

Новичок
Сообщения
48
Репутация
1
Код:
C:\Users\???????\Documents\turboupload.au3 (37) : ==> Unknown function name.:
$sResponse = _TCPFileUpload($sLocalFile, $sHost, $sFormAction, $sFormName)
$sResponse = ^ ERROR
>Exit code: 1    Time: 0.217
Из за чего я получаю такой ответ?
 

ivsatel

Продвинутый
Сообщения
319
Репутация
84
Jan-Jak
Добавьте в ваш скрипт функцию:
Код:
Func _TCPFileUpload($sLocalFile, $sHost, $sFormAction, $sFormName)
    Local $sFileRead, $sFileType, $sBoundary, $sData, $iDataSize, $sHeader, $sCommand, $iSocket, $sRecv
   
    $sHost = StringRegExpReplace($sHost, '(?i)^https?://', '')
   
    $sFileRead = FileRead($sLocalFile)
    $sFileType = StringRegExpReplace($sLocalFile, '^.*\.', '')
    If $sFileType = 'jpg' Then $sFileType = 'jpeg'
   
    $sBoundary = StringFormat('----------------%s%s%smzF', @MIN, @HOUR, @SEC)
   
    $sData = '--' & $sBoundary & @CRLF & _
        'Content-Disposition: form-data; name="' & $sFormName & '"; filename="' & StringRegExpReplace($sLocalFile, '^.*\\', '') & '"' & @CRLF & _
        'Content-Type: image/' & $sFileType & @CRLF & @CRLF & _
        $sFileRead & @CRLF & '--' & $sBoundary & '--' & @CRLF
   
    $iDataSize = StringLen($sData)
   
    $sHeader = 'POST ' & $sFormAction & ' HTTP/1.1' & @CRLF & _
                'Host: ' & $sHost & @CRLF & _
                'Connection: close' & @CRLF & _
                'Content-Type: multipart/form-data; boundary=' & $sBoundary & @CRLF & _
                'Content-Length: ' & $iDataSize & @CRLF & @CRLF
   
    $sCommand = $sHeader & $sData
   
    TCPStartup()
    $iSocket = TCPConnect(TCPNameToIP($sHost), 80)
    TCPSend($iSocket, $sCommand)
   
    While 1
        $sRecv &= TCPRecv($iSocket, 20000)
        If StringLen($sRecv) <> 0 Then ExitLoop
        Sleep(50)
    WEnd
   
    TCPShutdown()
    Return $sRecv
EndFunc
 
Верх