Здравствуйте, я пытаюсь реализовать отправку фото через telegram, там используется multipart/form-data, я очень долго мучаюсь с этим и все никак не могу заставить это работать, на данный момент остановился на этом решении. Оно выдает ошибку: The plain HTTP request was sent to HTTPS port. Я перепробовал уже около десятка подобных способов, ни один не смог заставить работать. Как изменить запрос для HTTPS? Или у кого-то есть другие реализации отправки данного POST запроса?
Документация Telegram для sendphoto
core.telegram.org/bots/api#sendphoto
Документация Telegram для sendphoto
core.telegram.org/bots/api#sendphoto
Код:
$sLocalFile = "Game Icon.png" ;Local file
$sHost = 'https://api.telegram.org' ;Upload page addresss
$sFormAction = '/bot<chage to your api key>/sendPhoto?chat_id=<chage to your chat id>'
$sFormName = 'photo'
$sHostPort = 443
$sResponse = _TCPFileUpload($sLocalFile, $sHost, $sHostPort, $sFormAction, $sFormName)
Func _TCPFileUpload($sLocalFile, $sHost, $sHostPort, $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), $sHostPort)
TCPSend($iSocket, $sCommand)
While 1
$sRecv &= TCPRecv($iSocket, 20000)
If StringLen($sRecv) <> 0 Then ExitLoop
Sleep(50)
WEnd
TCPShutdown()
Return $sRecv
EndFunc