Что нового

[Сеть, интернет] Отправка файла через 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
Репутация
369
Попробуй так:
Код:
$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 574
Репутация
2 434
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
Репутация
369
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 574
Репутация
2 434
Redline
Ищу кнопку «Супер полезное сообщение»!!!

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

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8 574
Репутация
2 434
Код для загрузки на 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 574
Репутация
2 434
А вот так получаем корректный 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

Новичок
Сообщения
41
Репутация
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
 
Верх