g Soap - разобрать пользовательский http заголовок из запроса - PullRequest
0 голосов
/ 12 февраля 2020

Я пытаюсь найти некоторую информацию о том, как разобрать пользовательские заголовки http, полученные в запросе от серверного приложения ag Soap. Я потратил несколько часов, пытаясь найти какую-либо документацию по этому вопросу, но до сих пор не увенчался успехом.

Я вижу множество документов о том, как установить настраиваемые заголовки http как для клиента, так и для сервера (например, через свойство http_extra_header), но не о том, как их читать из запроса, который был получен. Кажется, что g Soap поддерживает разбор существующих стандартизированных заголовков (например, X-Forwarded-For), но до сих пор я не могу понять, как получить доступ к заголовкам, которые еще не определены. Я обычно хорошо разбираюсь в подобных вещах, но продолжаю искать документацию для g Soap header files , soap headers или setting http заголовки. Ничего особенного при получении и разборе пользовательских заголовков, которые еще не определены четко.

Любая помощь очень ценится.

1 Ответ

1 голос
/ 13 февраля 2020

Вам понадобится функция обратного вызова для обработки заголовков HTTP, см. функции обратного вызова и, в частности, обратный вызов fparsehdr :

Обратный вызов, который использует HTTP заголовок, который состоит из пары ключ-значение.

Этот обратный вызов вызывается soap :: fparse, использует HTTP-заголовок, который разбит на пару ключ-значение, и соответственно обновляет состояние контекста soap .

Назначьте этот обратный вызов и используйте переданный ему ключ заголовка HTTP и пару значений. Обязательно вызовите исходный soap->fparsehdr(soap, key, val) в новом обратном вызове, чтобы механизм обработал все заголовки, передав их исходному обратному вызову:

soap->user = (void*)soap->fparsehdr; // to call fparsehdr() in our callback
soap->fparsehdr = my_parsehdr;

Новая функция обратного вызова:

typedef int(*PARSEFUNC)(struct soap*, const char*, const char*);
int my_parsehdr(struct soap *soap, const char *key, const char *val)
{
  ... // check key (non-NULL) and use val (non-NULL)
  return ((PARSEFUNC)(soap->user))(soap, key, val);
}

Я рекомендую передать все заголовки в движок, если это не пользовательский заголовок, который не имеет никакого значения для движка.

...