mirror of
https://git.mirrors.martin98.com/https://github.com/langgenius/dify.git
synced 2025-08-13 06:29:07 +08:00
feat: add RequestBodyError for invalid request body handling (#11994)
Signed-off-by: -LAN- <laipz8200@outlook.com>
This commit is contained in:
parent
9cfd1c67b6
commit
e068bbec73
@ -16,3 +16,7 @@ class InvalidHttpMethodError(HttpRequestNodeError):
|
|||||||
|
|
||||||
class ResponseSizeError(HttpRequestNodeError):
|
class ResponseSizeError(HttpRequestNodeError):
|
||||||
"""Raised when the response size exceeds the allowed threshold."""
|
"""Raised when the response size exceeds the allowed threshold."""
|
||||||
|
|
||||||
|
|
||||||
|
class RequestBodyError(HttpRequestNodeError):
|
||||||
|
"""Raised when the request body is invalid."""
|
||||||
|
@ -23,6 +23,7 @@ from .exc import (
|
|||||||
FileFetchError,
|
FileFetchError,
|
||||||
HttpRequestNodeError,
|
HttpRequestNodeError,
|
||||||
InvalidHttpMethodError,
|
InvalidHttpMethodError,
|
||||||
|
RequestBodyError,
|
||||||
ResponseSizeError,
|
ResponseSizeError,
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -143,13 +144,19 @@ class Executor:
|
|||||||
case "none":
|
case "none":
|
||||||
self.content = ""
|
self.content = ""
|
||||||
case "raw-text":
|
case "raw-text":
|
||||||
|
if len(data) != 1:
|
||||||
|
raise RequestBodyError("raw-text body type should have exactly one item")
|
||||||
self.content = self.variable_pool.convert_template(data[0].value).text
|
self.content = self.variable_pool.convert_template(data[0].value).text
|
||||||
case "json":
|
case "json":
|
||||||
|
if len(data) != 1:
|
||||||
|
raise RequestBodyError("json body type should have exactly one item")
|
||||||
json_string = self.variable_pool.convert_template(data[0].value).text
|
json_string = self.variable_pool.convert_template(data[0].value).text
|
||||||
json_object = json.loads(json_string, strict=False)
|
json_object = json.loads(json_string, strict=False)
|
||||||
self.json = json_object
|
self.json = json_object
|
||||||
# self.json = self._parse_object_contains_variables(json_object)
|
# self.json = self._parse_object_contains_variables(json_object)
|
||||||
case "binary":
|
case "binary":
|
||||||
|
if len(data) != 1:
|
||||||
|
raise RequestBodyError("binary body type should have exactly one item")
|
||||||
file_selector = data[0].file
|
file_selector = data[0].file
|
||||||
file_variable = self.variable_pool.get_file(file_selector)
|
file_variable = self.variable_pool.get_file(file_selector)
|
||||||
if file_variable is None:
|
if file_variable is None:
|
||||||
@ -317,6 +324,8 @@ class Executor:
|
|||||||
elif self.json:
|
elif self.json:
|
||||||
body = json.dumps(self.json)
|
body = json.dumps(self.json)
|
||||||
elif self.node_data.body.type == "raw-text":
|
elif self.node_data.body.type == "raw-text":
|
||||||
|
if len(self.node_data.body.data) != 1:
|
||||||
|
raise RequestBodyError("raw-text body type should have exactly one item")
|
||||||
body = self.node_data.body.data[0].value
|
body = self.node_data.body.data[0].value
|
||||||
if body:
|
if body:
|
||||||
raw += f"Content-Length: {len(body)}\r\n"
|
raw += f"Content-Length: {len(body)}\r\n"
|
||||||
|
@ -20,7 +20,7 @@ from .entities import (
|
|||||||
HttpRequestNodeTimeout,
|
HttpRequestNodeTimeout,
|
||||||
Response,
|
Response,
|
||||||
)
|
)
|
||||||
from .exc import HttpRequestNodeError
|
from .exc import HttpRequestNodeError, RequestBodyError
|
||||||
|
|
||||||
HTTP_REQUEST_DEFAULT_TIMEOUT = HttpRequestNodeTimeout(
|
HTTP_REQUEST_DEFAULT_TIMEOUT = HttpRequestNodeTimeout(
|
||||||
connect=dify_config.HTTP_REQUEST_MAX_CONNECT_TIMEOUT,
|
connect=dify_config.HTTP_REQUEST_MAX_CONNECT_TIMEOUT,
|
||||||
@ -136,9 +136,13 @@ class HttpRequestNode(BaseNode[HttpRequestNodeData]):
|
|||||||
data = node_data.body.data
|
data = node_data.body.data
|
||||||
match body_type:
|
match body_type:
|
||||||
case "binary":
|
case "binary":
|
||||||
|
if len(data) != 1:
|
||||||
|
raise RequestBodyError("invalid body data, should have only one item")
|
||||||
selector = data[0].file
|
selector = data[0].file
|
||||||
selectors.append(VariableSelector(variable="#" + ".".join(selector) + "#", value_selector=selector))
|
selectors.append(VariableSelector(variable="#" + ".".join(selector) + "#", value_selector=selector))
|
||||||
case "json" | "raw-text":
|
case "json" | "raw-text":
|
||||||
|
if len(data) != 1:
|
||||||
|
raise RequestBodyError("invalid body data, should have only one item")
|
||||||
selectors += variable_template_parser.extract_selectors_from_template(data[0].key)
|
selectors += variable_template_parser.extract_selectors_from_template(data[0].key)
|
||||||
selectors += variable_template_parser.extract_selectors_from_template(data[0].value)
|
selectors += variable_template_parser.extract_selectors_from_template(data[0].value)
|
||||||
case "x-www-form-urlencoded":
|
case "x-www-form-urlencoded":
|
||||||
|
Loading…
x
Reference in New Issue
Block a user