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);