Difference between revisions of "IPConnection.HTTPSetHeaderField"

From SunFlurry wiki
Jump to: navigation, search
 
m (1 revision imported)
 
(No difference)

Latest revision as of 08:51, 7 February 2021

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

Функция устанавливает поле по его наименованию в заголовке запроса или ответа на запрос. Если поле уже существует, функция заменяется его значение, поэтому, она не годится для изменения полей "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;