IPConnection.HTTPSendAndReceive
HTTPSendAndReceive (Работа с HTTP) | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
Функция выполняет отправку подготовленного пакета (запроса или ответа на запрос), после чего при необходимости, может загрузить ответ удаленной стороны. Если ответ удаленной стороны не должен присутствовать (данный пакет был ответом), либо ответ не содержит поля Content-Length
(к примеру, видео), необходимо вызвать функцию со значением аргумента, равным 0, либо использовать одну из функций HTTPReceive.
Синтаксис
IPConnection.HTTPSendAndReceive(<После отправки запроса, ждать и получить ответ (INT)>=1):<Удачное выполнение (INT)>
Аргументы
<После отправки запроса, ждать и получить ответ (INT)>
- (необязательный аргумент) Аргумент задает режим получения ответного пакета после отправки. Если аргумент равен нулю, функция выполняет такие же действия, как и функция HTTPSend, отсылая подготовленный заголовок и тело HTTP пакета. В ином случае, выполняются последовательно две функции HTTPSend, затем HTTPReceive.
Возвращаемое значение
Возвращает 1, если операция выполнена успешно, иначе возвращает 0.
Примеры
//Пример показывает, как можно осуществить загрузку веб-страницы по ее адресу. //Для загрузки по протоколу https требуется указание пути к библиотекам OpenSSL или LibreSSL. Function LoadPage(URL) bHTTPs:=pos("https://",Lowercase(URL)); If pos("//",URL)>0 Then tearStr(URL,"//"); EndIf; СтрДоб:=URL; URL:=tearStr(СтрДоб,"/"); //URL может содержать название параграфа СтрДоб:=TearStr(СтрДоб,"#"); For i:=1 to 3 Do if bHTTPs Then tcp:=IPConnection.Connect(URL+?(Pos(":",URL)+Pos("=",URL)=0,"=443"),1); Else tcp:=IPConnection.Connect(URL+?(Pos(":",URL)+Pos("=",URL)=0,"=80")); EndIf; if tcp.IsConnected Then Break; EndIf; EndDo; if not tcp.IsConnected Then Message("Could not connect: "+URL,"!"); Exit; EndIf; СтрДоб:="/"+СтрДоб; if bHTTPs then //tcp.InitEncryption("LibreSSL","C:\LibreSSL255\libtls-15.dll"); tcp.InitEncryption("OpenSSL","C:\OpenSSL111e\libssl-1_1.dll"); endif; tcp.HTTPSetOperation("GET "+СтрДоб+" HTTP/1.0"); tcp.HTTPSetHeaderField("Host",tcp.HTTPPunycodeEncode(URL)); tcp.HTTPSetHeaderField("User-Agent","Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)"); tcp.HTTPSetHeaderField("Accept","text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"); tcp.HTTPSetHeaderField("Accept-Language","en"); tcp.HTTPSetHeaderField("Connection","Close"); Стр:=""; Try If tcp.HTTPSendAndReceive Then Стр:=tcp.HTTPBodyAsString; If _And(Pos(_NEWLINE,Стр)=0,Pos(Chr(10),Стр)>0) Then Стр:=Replace(Стр,Chr(10),_NEWLINE); EndIf; EndIf; Except Message("Could not load: "+URL,"!"); EndTry; Exit Стр; EndFunction s:=LoadPage("https://en.wikipedia.org/wiki/Main_Page"); Message(s);