Difference between revisions of "IPConnection.HTTPSetHeaderField"
m (1 revision imported) |
|
(No difference)
| |
Latest revision as of 07:51, 7 February 2021
| HTTPSetHeaderField (Работа с HTTP) | |||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| |||||||||||||
Функция устанавливает поле по его наименованию в заголовке запроса или ответа на запрос. Если поле уже существует, функция заменяется его значение, поэтому, она не годится для изменения полей "Set-Cookie", которых в заголовке ответа сервера может быть несколько. Для изменения полей cookie можно использовать объект Cookie, либо прочитать весь заголовок в виде строки, добавить строки с cookie и установить модифицированный заголовок в объект запроса. Для обычного http запроса рекомендуется наличие следующих полей: Host, User-Agent, Accept, Accept-Language, Connection, кроме того должны присутствовать поля Content-Type, Content-Length, если в запросе есть не пустое тело. Чтобы удалить поле, необходимо вызвать функцию HTTPRemoveHeaderField, а не устанавливать пустое значение (поле остается в заголовке с пустым значением). Следует также помнить, что имена полей записываются с учетом регистра.
Синтаксис
IPConnection.HTTPSetHeaderField(<Имя поля (STRING)>,<Значение поля (STRING)>)
Аргументы
<Имя поля (STRING)>- ANSI-строка с именем поля.<Значение поля (STRING)>- ANSI-строка со значением поля без завершающего переноса строки.
Примеры
//Фрагмент получает http пакет на сервере и отправляет ответ
Try
If not TCP.HTTPReceiveHeader Then
Exit;
EndIf;
Repeat
аДлина:=Number(TCP.HTTPGetHeaderField("Content-Length"));
тЗапрос:="";
If (аДлина>0)And(аДлина<16384) Then
тЗапрос:=TCP.ReceiveStrRaw(аДлина);
EndIf;
//?<пар>=<зн>&...
СтрОп:=DecodeHTMLString(TCP.HTTPGetOperation);
Message("req: "+СтрОп);
TearStr(СтрОп,"?");
СтрОп:=TearStr(СтрОп," ");
СтрОп:="&"+СтрОп+"&";
//Получаем и декодируем параметры из СтрОп
...
//Создаем картинку-ответ в тОтвет
...
Until 1;
тОтвет:=тОтвет.SaveToString("png");
аДата:=GMTDate();
TCP.HTTPClear(3);
TCP.HTTPSetOperation("HTTP/1.0 200 OK");
TCP.HTTPSetHeaderField("Date",FormatDate(аДата,"N, DD M YYYY hh:tt:ss ""GMT""","en"));
TCP.HTTPSetHeaderField("Server","SF http server");
TCP.HTTPSetHeaderField("Last-Modified",FormatDate(аДата,"N, DD M YYYY hh:tt:ss ""GMT""","en"));
TCP.HTTPSetHeaderField("Content-Length",Length(тОтвет));
TCP.HTTPSetHeaderField("Cache-Control","no-store");
TCP.HTTPSetHeaderField("Connection","close");
TCP.HTTPSetHeaderField("Content-Type","image/png");
TCP.HTTPSetBody(тОтвет);
TCP.HTTPSend();
Finally
Стр:=PopError();
If not isEmpty(Стр) Then
Message(Стр,"!");
EndIf;
SuppressException();
TCP.Disconnect();
EndTry;