Заголовки запроса в виде хеша Perl
В поставке веб-сервера Nginx имеется встроенная поддержка интерпретатора
Perl.
Интерфейсный метод header_in позволяет получить значение произвольного заголовка
запроса.
Но иногда, в процессе веб-разработки, появляется потребность получить все
заголовки запроса в виде хеша (например чтобы проитерироваться по заголовкам с
известным префиксом).
В этом случае может помочь приведенный ниже патч (проверен на ряде крупных проектов).
--- src/http/modules/perl/nginx.xs.orig 2011-12-20 21:46:31.000000000 +0400
+++ src/http/modules/perl/nginx.xs 2011-12-20 21:46:35.000000000 +0400
@@ -214,6 +214,44 @@
ST(0) = TARG;
+HV*
+headers_in(r)
+ CODE:
+
+ dXSTARG;
+ ngx_http_request_t *r;
+ ngx_list_part_t *part;
+ ngx_table_elt_t *h;
+ ngx_uint_t i;
+ HV *hh;
+ SV *v;
+
+ ngx_http_perl_set_request(r);
+
+ hh = newHV();
+
+ part = &r->headers_in.headers.part;
+ h = part->elts;
+
+ for (i = 0;; i++) {
+ if (i >= part->nelts) {
+ if (!part->next)
+ break;
+ part = part->next;
+ h = part->elts;
+ i = 0;
+ }
+ v = newSVpv(h[i].value.data, h[i].value.len);
+ hv_store(hh, h[i].key.data, h[i].key.len, v, 0);
+ }
+
+ RETVAL = hh;
+ sv_2mortal((SV*)RETVAL);
+
+ OUTPUT:
+ RETVAL
+
+
void
header_in(r, key)
CODE: