Difference between revisions of "IPConnection.HTTPDecompress"

From SunFlurry wiki
Jump to: navigation, search
1>Admin
 
m (1 revision imported)
 
(2 intermediate revisions by 2 users not shown)
Line 22: Line 22:
 
==== Аргументы ====
 
==== Аргументы ====
 
* <code>''<Строка или буфер для декомпрессии (STRING,BUFFER)>''</code> - ANSI-строка или буфер для декомпрессии. Если аргументом является строка, результат будет возвращен, как строка, если аргументом является буфер, результат будет возвращен как буфер.
 
* <code>''<Строка или буфер для декомпрессии (STRING,BUFFER)>''</code> - ANSI-строка или буфер для декомпрессии. Если аргументом является строка, результат будет возвращен, как строка, если аргументом является буфер, результат будет возвращен как буфер.
* <code>''<Алгоритм компрессии (INT)>''</code> - {{Optional}} Аргумент задает алгоритм компрессии. На данный момент возможно только значение ''0'', которое отвечает за алгоритм ''gzip'' (являющийся оберткой алгоритма deflate)
+
* <code>''<Алгоритм компрессии (INT)>''</code> - {{Optional}} Аргумент задает алгоритм компрессии. На данный момент принимаются значения:
 +
** ''0'' -- алгоритм ''gzip'' (являющийся оберткой компрессии zlib)
 +
** ''1'' -- алгоритм ''deflate'' (компрессия с заголовкой zlib)
  
 
==== Возвращаемое значение ====
 
==== Возвращаемое значение ====
Line 30: Line 32:
 
<pre>
 
<pre>
 
aTCP:=IPConnection.Connect("www.google.com:80");
 
aTCP:=IPConnection.Connect("www.google.com:80");
aTCP.HTTPSetOperation("GET / HTTP/1.0");
+
aTCP.HTTPSetOperation("GET / HTTP/1.1");
 
aTCP.HTTPSetHeaderField("Host","www.google.com");
 
aTCP.HTTPSetHeaderField("Host","www.google.com");
 
aTCP.HTTPSetHeaderField("User-Agent","Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)");
 
aTCP.HTTPSetHeaderField("User-Agent","Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)");
 
aTCP.HTTPSetHeaderField("Accept","text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8");
 
aTCP.HTTPSetHeaderField("Accept","text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8");
 
aTCP.HTTPSetHeaderField("Accept-Language","en");
 
aTCP.HTTPSetHeaderField("Accept-Language","en");
aTCP.HTTPSetHeaderField("Accept-Encoding","gzip");
+
aTCP.HTTPSetHeaderField("Accept-Encoding","gzip,deflate");
 
aTCP.HTTPSetHeaderField("Connection","Close");
 
aTCP.HTTPSetHeaderField("Connection","Close");
 
If aTCP.HTTPSendAndReceive Then
 
If aTCP.HTTPSendAndReceive Then
 +
  aTCP.HTTPDecodeChunked();
 
   Стр:=aTCP.HTTPBodyAsString;
 
   Стр:=aTCP.HTTPBodyAsString;
   If aTCP.HTTPGetHeaderField("Content-Encoding")="gzip" Then
+
   аТип:=aTCP.HTTPGetHeaderField("Content-Encoding");
     Стр:=IPConnection.HTTPDecompress(Стр);
+
  аТип:=?(аТип="gzip",0,?(аТип="deflate",1,-1));
 +
  If аТип>=0 Then
 +
     Стр:=IPConnection.HTTPDecompress(Стр,аТип);
 
   EndIf;
 
   EndIf;
 
   Message("Полученная строка: "+Стр);
 
   Message("Полученная строка: "+Стр);
 
EndIf;
 
EndIf;
 
</pre>
 
</pre>

Latest revision as of 12:09, 13 March 2022

  HTTPDecompress (Работа со сжатыми HTTP-пакетами)
Объект:Объект IP
Статус разработки: Реализована
Тип:Функция
Обращение к БД:Нет
Исключения:Невозможно превратить в строку, число, неверный аргумент, системная ошибка.
Визуальность:Нет

Функция выполняет декомпрессию информации, обычно полученной из тела HTTP-пакета. При обмене сжатыми пакетами, обычно используется алгоритм gzip. Для иницииации компрессии в заголовке исходящего пакета необходимо указать Accept-Encoding: gzip (для алгоритма сжатия gzip). Функция может использоваться не только для информации, полученной по HTTP, но и для произвольной информации, единственным ограничением может служить факт, что функция не отдает имени файла, которое иногда записывается в архив (при передаче по http такое имя отсутствует). Функция может быть вызвана непосредственно из интерфейса.

Синтаксис

IPConnection.HTTPDecompress(<Строка или буфер для декомпрессии (STRING,BUFFER)>,<Алгоритм компрессии (INT)>=0):<Результат декомпрессии (STRING,BUFFER)>

Аргументы

  • <Строка или буфер для декомпрессии (STRING,BUFFER)> - ANSI-строка или буфер для декомпрессии. Если аргументом является строка, результат будет возвращен, как строка, если аргументом является буфер, результат будет возвращен как буфер.
  • <Алгоритм компрессии (INT)> - (необязательный аргумент) Аргумент задает алгоритм компрессии. На данный момент принимаются значения:
    • 0 -- алгоритм gzip (являющийся оберткой компрессии zlib)
    • 1 -- алгоритм deflate (компрессия с заголовкой zlib)

Возвращаемое значение

Возвращается строку или буфер в зависимости от типа первого аргумента.

Примеры

aTCP:=IPConnection.Connect("www.google.com:80");
aTCP.HTTPSetOperation("GET / HTTP/1.1");
aTCP.HTTPSetHeaderField("Host","www.google.com");
aTCP.HTTPSetHeaderField("User-Agent","Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)");
aTCP.HTTPSetHeaderField("Accept","text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8");
aTCP.HTTPSetHeaderField("Accept-Language","en");
aTCP.HTTPSetHeaderField("Accept-Encoding","gzip,deflate");
aTCP.HTTPSetHeaderField("Connection","Close");
If aTCP.HTTPSendAndReceive Then
  aTCP.HTTPDecodeChunked();
  Стр:=aTCP.HTTPBodyAsString;
  аТип:=aTCP.HTTPGetHeaderField("Content-Encoding");
  аТип:=?(аТип="gzip",0,?(аТип="deflate",1,-1));
  If аТип>=0 Then
    Стр:=IPConnection.HTTPDecompress(Стр,аТип);
  EndIf;
  Message("Полученная строка: "+Стр);
EndIf;