Skip to content

Commit 1b11508

Browse files
committed
Load HTTP request str fields
1 parent e0cb1aa commit 1b11508

File tree

4 files changed

+50
-3
lines changed

4 files changed

+50
-3
lines changed

nginx/http/http.pyx

Lines changed: 29 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
from cpython cimport Py_INCREF, Py_DECREF
2-
from .nginx_core cimport ngx_log_error, NGX_LOG_CRIT, NGX_AGAIN
2+
from .nginx_core cimport ngx_log_error, NGX_LOG_CRIT, NGX_AGAIN, from_nginx_str
33
from .ngx_http cimport ngx_http_request_t, ngx_http_core_run_phases
44
from .ngx_http cimport ngx_http_get_module_ctx, ngx_http_set_ctx
55

@@ -11,6 +11,13 @@ cdef class Request:
1111
ngx_http_request_t *request
1212
public Log log
1313
object future
14+
public str request_line
15+
public str uri
16+
public str args
17+
public str extension
18+
public str unparsed_uri
19+
public str method_name
20+
public str http_protocol
1421

1522
def __init__(self, *args):
1623
raise NotImplementedError
@@ -30,6 +37,18 @@ cdef class Request:
3037
return self.future.result()
3138
return NGX_AGAIN
3239

40+
def __repr__(self):
41+
return f'Request({self.method_name} {self.uri})'
42+
43+
def __str__(self):
44+
return f''' request_line: {self.request_line}
45+
uri: {self.uri}
46+
args: {self.args}
47+
extension: {self.extension}
48+
unparsed_uri: {self.unparsed_uri}
49+
method_name: {self.method_name}
50+
http_protocol: {self.http_protocol}'''
51+
3352
@staticmethod
3453
cdef Request from_ptr(ngx_http_request_t *request):
3554
cdef:
@@ -40,6 +59,15 @@ cdef class Request:
4059
new_req = Request.__new__(Request)
4160
new_req.request = request
4261
new_req.log = Log.from_ptr(request.connection.log)
62+
63+
new_req.request_line = from_nginx_str(request.request_line)
64+
new_req.uri = from_nginx_str(request.uri)
65+
new_req.args = from_nginx_str(request.args)
66+
new_req.extension = from_nginx_str(request.exten)
67+
new_req.unparsed_uri = from_nginx_str(request.unparsed_uri)
68+
new_req.method_name = from_nginx_str(request.method_name)
69+
new_req.http_protocol = from_nginx_str(request.http_protocol)
70+
4371
ngx_http_set_ctx(request, <void *>new_req, ngx_python_module)
4472
return new_req
4573
else:

nginx/http/module.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ def post_read(self, request):
1818
log.debug('post_read end')
1919
return request._result()
2020
else:
21-
log.debug('post_read start')
21+
log.debug('post_read request:\n%s', request)
2222
return request._start(self.loop.create_task(self._handle(request)))
2323

2424
async def _handle(self, request):

nginx/nginx_core.pxd

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
1+
from cpython.bytes cimport PyBytes_FromStringAndSize
2+
13
from .nginx_config cimport ngx_int_t, ngx_uint_t
24

5+
36
cdef extern from "ngx_core.h":
47
const ngx_int_t NGX_OK
58
const ngx_int_t NGX_ERROR
@@ -18,6 +21,10 @@ cdef extern from "ngx_core.h":
1821
ctypedef int ngx_err_t
1922
ctypedef int ngx_msec_t
2023

24+
ctypedef struct ngx_str_t:
25+
size_t len
26+
char *data
27+
2128
ctypedef struct ngx_module_t:
2229
pass
2330

@@ -37,3 +44,8 @@ cdef extern from "ngx_core.h":
3744
ngx_log_t *log,
3845
ngx_err_t err,
3946
const char *fmt)
47+
48+
49+
cdef inline str from_nginx_str(ngx_str_t str):
50+
return PyBytes_FromStringAndSize(<char*>str.data,
51+
str.len).decode('iso-8859-1')

nginx/ngx_http.pxd

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
from .nginx_core cimport ngx_module_t, ngx_log_t
1+
from .nginx_core cimport ngx_str_t, ngx_module_t, ngx_log_t
22

33

44
cdef extern from "ngx_http.h":
@@ -7,6 +7,13 @@ cdef extern from "ngx_http.h":
77

88
ctypedef struct ngx_http_request_t:
99
ngx_connection_t *connection
10+
ngx_str_t request_line
11+
ngx_str_t uri
12+
ngx_str_t args
13+
ngx_str_t exten
14+
ngx_str_t unparsed_uri
15+
ngx_str_t method_name
16+
ngx_str_t http_protocol
1017

1118
void ngx_http_core_run_phases(ngx_http_request_t *request)
1219
void *ngx_http_get_module_ctx(ngx_http_request_t *request,

0 commit comments

Comments
 (0)