Здравствуйте!
Нужно организовать HTTP запросы. Возникли вопросы, просьба подсказать знающим.
1. ReceiveNetworkData не получает одной командой всю информацию с сайта. Я сделал цикл с проверкой в ответах на закрывающий документ тег </HTML>. Это работает, но ведь это костыль? Какое тут верное решение должно быть? Можно было бы парсить заголовок в ответе, но он далеко не всегда содержит количество передаваемых данных.
2. Как работать с сайтом на HTTPS?
3. Как принимать UTF-8? В примере кода ниже как раз сайт на такой кодировке. Вместо кириллицы кракозябры.
Procedure$ net_connection (server_name$, method$, webpage$, post$)
; server_name$- домен сайта
; method$ - GET или POST
; webpage$ - имя страницы включая полный путь от домена
; post$ - какие данные отправить странице
ConnectionID = OpenNetworkConnection(server_name$, 80)
If ConnectionID ; соединение произошло
request$ = method$+" " + webpage$ + " HTTP/1.1" + Chr(13) + Chr(10)
request$ + "Host: " + server_name$ + Chr(13) + Chr(10)
request$ + "User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.2.1) Gecko/20021204" + Chr(13) + Chr(10)
request$ + "Accept: text/xml,application/xml,application/xhtml+xml,"
request$ + "text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,"
request$ + "image/jpeg,image/gif;q=0.2,text/css,*/*;q=0.1" + Chr(13) + Chr(10)
request$ + "Accept-Language: en-us, en;q=0.50" + Chr(13) + Chr(10)
; request$ + "Accept-Encoding: gzip, deflate, compress;q=0.9" + Chr(13) + Chr(10)
request$ + "Accept-Charset: ISO-8859-1, utf-8;q=0.66, *;q=0.66" + Chr(13) + Chr(10)
request$ + "Keep-Alive: 300" + Chr(13) + Chr(10)
request$ + "Connection: keep-alive" + Chr(13) + Chr(10)
request$ + "Referer: " + referer$ + Chr(13) + Chr(10)
request$ + "Cache-Control: max-age=0" + Chr(13) + Chr(10)
request$ + "Content-Type: application/x-www-form-urlencoded" + Chr(13) + Chr(10)
request$ + "Content-Length: " + Str(Len(post$)) + Chr(13) + Chr(10)
request$ + Chr(13) + Chr(10)
request$ + post$
res_send = SendNetworkData(ConnectionID,@request$,Len(request$))
;Debug "res_send: "+Str(res_send)
ret$=""
done.a=0
bytes_rec=0
page_len=20000
timeout=1000
*mem_buf=AllocateMemory (page_len)
If Not *mem_buf
ProcedureReturn "ERROR: memory is not available"
EndIf
Repeat
Delay(10)
Result = NetworkClientEvent(ConnectionID)
Select Result
Case #PB_NetworkEvent_Data
bytes_rec_a=ReceiveNetworkData(ConnectionID, *mem_buf+bytes_rec, page_len)
bytes_rec+bytes_rec_a
Debug bytes_rec_a
If FindString(PeekS (*mem_buf), "</html>", 1) Or FindString(PeekS (*mem_buf), "</HTML>", 1)
done=1
ElseIf (MemorySize (*mem_buf)-bytes_rec)<page_len
*mem_buf=ReAllocateMemory (*mem_buf, MemorySize (*mem_buf)+page_len)
EndIf
Case 0
timeout-1
If timeout=0
ret$="ERROR: timeout"+Chr(13)
Break
EndIf
EndSelect
Until done = 1
CloseNetworkConnection(ConnectionID)
ret$+PeekS (*mem_buf)
FreeMemory (*mem_buf)
Debug "bytes_rec: "+Str(bytes_rec)
ProcedureReturn ret$
Else; соединение не произошло
ProcedureReturn "ERROR: no connection"
EndIf
EndProcedure
InitNetwork()
Enumeration
#win_0
#gad_edit_0
EndEnumeration
win_id=OpenWindow(#win_0, 0, 0, 600, 600, "NET", #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget|#PB_Window_ScreenCentered)
gad_edit_0_id = EditorGadget(#gad_edit_0, 5, 5, 590, 590)
page_content$=net_connection ("ulyanovskstiralmash.plp7.ru", "GET", "/", "")
SetGadgetText (#gad_edit_0, GetGadgetText(#gad_edit_0)+page_content$)
AddGadgetItem(#gad_edit_0, -1, "___________________"+#CRLF$+"Total: "+Str(Len(page_content$))+" characters")
SendMessage_(GadgetID(#gad_edit_0),#EM_SETSEL,-1,-1)
Repeat
Until WaitWindowEvent() = #PB_Event_CloseWindow
End
Видимо, моя версия (4.41) старовата для этих функций. А менять свой код в 25000 строк под последнюю версию для меня трудоёмкая задача... 
