Difference between revisions of "IPConnection.HTTPDecompress"
m (1 revision imported) |
m (1 revision imported) |
||
(One intermediate revision by one other user not shown) | |||
Line 22: | Line 22: | ||
==== Аргументы ==== | ==== Аргументы ==== | ||
* <code>''<Строка или буфер для декомпрессии (STRING,BUFFER)>''</code> - ANSI-строка или буфер для декомпрессии. Если аргументом является строка, результат будет возвращен, как строка, если аргументом является буфер, результат будет возвращен как буфер. | * <code>''<Строка или буфер для декомпрессии (STRING,BUFFER)>''</code> - ANSI-строка или буфер для декомпрессии. Если аргументом является строка, результат будет возвращен, как строка, если аргументом является буфер, результат будет возвращен как буфер. | ||
− | * <code>''<Алгоритм компрессии (INT)>''</code> - {{Optional}} Аргумент задает алгоритм компрессии. На данный момент | + | * <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. | + | 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; | ||
− | + | аТип:=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 11:09, 13 March 2022
HTTPDecompress (Работа со сжатыми HTTP-пакетами) | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
Функция выполняет декомпрессию информации, обычно полученной из тела 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;