fix: invoke.go — forward Content-Length to proxied request (form POST fix)
Without ContentLength, Python BaseHTTPRequestHandler read 0 bytes from body. operator v0.1.37, python runtime v0.1.4, pg-table-writer HTML form
This commit is contained in:
@@ -56,6 +56,8 @@ class FunctionHandler(BaseHTTPRequestHandler):
|
||||
event['_path'] = parsed.path
|
||||
event['_query'] = query
|
||||
event['_method'] = self.command
|
||||
# Accept заголовок — позволяет функции различать браузер и curl/API.
|
||||
event['_accept'] = self.headers.get('Accept', '')
|
||||
return event
|
||||
|
||||
def do_GET(self):
|
||||
@@ -110,11 +112,13 @@ class FunctionHandler(BaseHTTPRequestHandler):
|
||||
self.wfile.write(body)
|
||||
|
||||
def _respond(self, status, data):
|
||||
# Если функция вернула строку — отдаём как text/plain без json.dumps.
|
||||
# Позволяет функциям возвращать человекочитаемый текст напрямую (curl без парсинга).
|
||||
# Если функция вернула строку:
|
||||
# начинается с '<' → HTML (text/html) — для страниц с формами.
|
||||
# иначе → text/plain — для человекочитаемого текста.
|
||||
# Позволяет функциям возвращать HTML напрямую без изменений runtime-образа.
|
||||
if isinstance(data, str):
|
||||
body = data.encode("utf-8")
|
||||
ctype = "text/plain; charset=utf-8"
|
||||
ctype = "text/html; charset=utf-8" if data.lstrip().startswith("<") else "text/plain; charset=utf-8"
|
||||
else:
|
||||
body = json.dumps(data).encode("utf-8")
|
||||
ctype = "application/json"
|
||||
|
||||
Reference in New Issue
Block a user