Руководство разработчика

Функция HTTP_ЗАПРОС

Функция HTTP_ЗАПРОС позволяет осуществить взаимодействие с удаленным http-сервером.

ФУНКЦИЯ ТИП_ЛОГИКА: HTTP_ЗАПРОС(ТИП_СТРОКА: url, файл_вход, файл_выход
                                [; ТИП_СПИСОК: опции [; ТИП_СПИСОК: заголовки]])

Параметры

url
URL http сервера. Возможно указание протокола (http или https; по умолчанию используется http) и порта (для http по умолчанию 80 – стандартный для этого протокола порт). Например, "https://server.example.net/RPC:8080".

При необходимости передачи длинной строки (длина которой превышает 255 символов) следует использовать объект типа список.
файл_вход
Файл тела HTTP-запроса. Для запросов типа GET, DELETE и др. может не указываться.
Для случая XML RPC – ХML файл входных параметров. За более подробной информацией о формате входных параметров обратитесь к спецификации XMLRPC и к документации к серверу, запрос к которому вы делаете.

Для отправки полей формы как multipart/form-data (аналог curl --form) в параметре указывается "*", а данные для формирования тела запроса берутся из опций form (см. ниже).

Вместо имени файла может указываться имя пользовательского списка атрибутов, начинающееся с символа & или $ (например, "$http_input"). С помощью функции УСТ_СПИСОК_АТРИБУТОВ выполняется задание входных данных в виде объекта список. Строки указанного списка соединяются без разделителя. Текст в списке содержится в кодировке ANSI. При добавлении в HTTP запрос входные данные перекодируется в UTF-8.
файл_выход
Файл ответа HTTP-сервера.
Для случая XML RPC – XML файл выходных параметров или XML RPC ошибки.

Вместо имени файла может указываться имя пользовательского списка атрибутов, начинающееся с символа & или $ (например, "$http_output"). В этом случае предполагается, что ответ от сервера приходит в кодировке UTF-8. Для помещения текста в список выполняется перекодирование из UTF-8 в ANSI. Следует иметь в виду, что не все Unicode-символы имеют соответствие в ANSI кодировке. С помощью функции СПИСОК_АТРИБУТОВ выполняется получение выходных данных в виде объекта список. В список заносятся фрагменты данных про 255 символов и остаток в конце.
опции
Необязательный параметр. Список опций HTTP-запроса.
Опции указываются в форме: <имя опции>=<значение>
Поддерживаются следующие опции:
verb Действие HTTP-запроса. Поддерживаются основные действия GET, POST, PUT, DELETE (набор для REST). По умолчанию – нужный для XML-RPC POST. Также можно указать другое действие (custom request).
getdata Флаг true/false отправки входного файла как тела GET-запроса. По умолчанию false.
login Имя пользователя для запросов, требующих авторизации на сервере (аналогично curl --user "login:password").
password Пароль пользователя, имя которого указано в опции login.
connect_timeout Таймаут установления соединения в миллисекундах. По умолчанию 20 секунд.
data_timeout Таймаут получения данных в миллисекундах. По умолчанию 20 секунд.
debug Флаг true/false вывода расширенной диагностики в окно отладочных сообщений, указанный список атрибутов или файл (аналогично curl --verbose). По умолчанию false. Способ вывода диагностической информации определяется параметрами trace_type, trace_time и log.
trace_type Позволяет указать режим вывода отладочной информации. Этот параметр учитывается только при указании debug=true.
  • Значение bin применяется для трассировки двоичных данных (аналогично curl --trace). Двоичные данные выводятся столбиками шестнадцатеричных значений байтов (как в hex-редакторах файлов).
  • Значение ascii применяется для трассировки текстовых данных (аналогично curl --trace-ascii). Не ASCII символы при выводе заменяются точкой.
  • По умолчанию используется режим диагностики и вывод заголовков (аналогично curl --verbose). Для входных и выходных данных в этом режиме выводится только размер в байтах.
Эти три режима являются взаимоисключающими.
trace_time Вывод времени в начале строк отладочных сообщений (аналогично curl --trace-time). По умолчанию false. Этот параметр учитывается только при указании debug=true.
log Имя лог-файла для записи расширенной диагностики (опция debug). При указании имени файла вывод в окно отладочных сообщений не выполняется. Вместо имени файла может указываться имя пользовательского списка атрибутов, начинающееся с символа & или $. Этот параметр учитывается только при указании debug=true.
proxy_address Позволяет указать адрес и порт прокси-сервера для доступа в Интернет. В адресе прокси надо указать протокол: http или https, ip-адрес и номер порта. Например, https://127.0.0.1:8080. Если этот параметр не указан или адрес - пустая строка, то выполняется поиск глобальной настройки прокси. Глобально указать параметры прокси-сервера можно в файле gnet.ini (см. ниже).
proxy_login Имя пользователя прокси-сервера. Если прокси не использует авторизацию, то этот параметр не указывается.
proxy_password Пароль пользователя прокси-сервера. Если прокси не использует авторизацию, то этот параметр не указывается.
ignore_offline Флаг true/false позволяет игнорировать проверку признака подключения к Интернету по мнению Windows. По умолчанию false. Для выполнения http-запросов к серверу на localhost или в локальной сети без выхода в Интернет необходимо указать ignore_offline=true. Эта возможность может быть полезна для тестирования и отладки.
no_cookies Флаг true/false позволяет запретить использование cookies. По умолчанию false, т.е. cookies разрешены.
no_redirect Флаг true/false позволяет запретить перенаправление запросов. По умолчанию false, т.е. перенаправление запросов разрешено.
fail_on_http_errors Флаг true/false позволяет включить режим интерпретации кодов ответа сервера >=400 как ошибок запроса. По умолчанию false, т.е. используется толерантное отношение к кодам ответа сервера.
form Описание поля формы аналогично команде curl --form. Для простых параметров "form=param=value". Для загрузки файлов "form=logo=@c:\temp\iblogo.jpg". См. другие подробности синтаксиса и дополнительные параметры в документции curl для команды --form.
заголовки
Необязательный параметр. Список заголовков HTTP-запроса. Например, значение для заголовка Content-Type.

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

ДА – при успешном выполнении HTTP-запроса. При недоступности сервера или другой сетевой ошибке функция возвращает НЕТ. Текст ошибки записывается в файл error.log. Дополнительная диагностика может выводится в окно отладки (если включена соответствующая опция в настройках программы) при указании опции "debug=true".

Для случая XML RPC.
ДА – при успешном получении ответного XML файла от сервера. При недоступности сервера или другой сетевой ошибке функция возвращает НЕТ. Следует заметить, что возвращаемый результат говорит об успешности именно получения ответа; в ответе может находится структура <fault>, но в этом случае функция все равно вернет ДА.

Дополнительная информация об ошибках.
С помощью функции АТРИБУТ с параметрами "http_code", "http_response" и "http_error" можно получить дополнительную информацию об ошибке предшествовавшего http-запроса. Функция АТРИБУТ все значения возвращает в строковом виде. Параметр "http_code" соответствует коду ошибки библиотеки gnet3.dll. Ниже приведены некоторые коды ошибок:

Параметр "http_response" – код ответа сервера, например 404, если указанная в URL страница не найдена. Если до ответа сервера дело не дошло, то возвращается 0. Параметр "http_error" позволяет получить текстовое сообщение ошибки. Для ошибок типа таймаут и оффлайн текстовое сообщение не заполняется. Это же текстовое сообщение записывается в файл error.log.

Глобальная настройка прокси-сервера.

Чтобы не указывать параметры прокси-сервера в каждом запросе, можно задать их глобально в специальном файле. Для этого нужно поместить файл gnet.ini в одну папку с gnet3.dll (или создать папку config на уровень выше и положить его туда – это место проверяется во вторую очередь). В файле в секции [proxy] нужно указать адрес прокси, логин и пароль:

gnet.ini

[proxy]
address=proxy_address
login=proxy_login
password=proxy_password

В адресе прокси надо указать протокол: http или https, ip-адрес и номер порта. Например, https://127.0.0.1:8080. Если прокси не использует авторизацию, то параметры login и password не указываются или указываются пустыми строками.


См. также: