From fe26be2312b08000bee624fee58d8ec7ae9e1350 Mon Sep 17 00:00:00 2001 From: yihong Date: Mon, 6 Jan 2025 20:35:53 +0800 Subject: [PATCH] fix: http method can be upper case and lower case close #11877 (#12401) Signed-off-by: yihong0618 --- api/core/tools/tool/api_tool.py | 19 ++++++++-- .../workflow/nodes/http_request/entities.py | 17 ++++++++- .../workflow/nodes/http_request/executor.py | 36 +++++++++++++++++-- 3 files changed, 66 insertions(+), 6 deletions(-) diff --git a/api/core/tools/tool/api_tool.py b/api/core/tools/tool/api_tool.py index 9a00450290..7d27c4fcf1 100644 --- a/api/core/tools/tool/api_tool.py +++ b/api/core/tools/tool/api_tool.py @@ -202,8 +202,23 @@ class ApiTool(Tool): else: body = body - if method in {"get", "head", "post", "put", "delete", "patch"}: - response: httpx.Response = getattr(ssrf_proxy, method)( + if method in { + "get", + "head", + "post", + "put", + "delete", + "patch", + "options", + "GET", + "POST", + "PUT", + "PATCH", + "DELETE", + "HEAD", + "OPTIONS", + }: + response: httpx.Response = getattr(ssrf_proxy, method.lower())( url, params=params, headers=headers, diff --git a/api/core/workflow/nodes/http_request/entities.py b/api/core/workflow/nodes/http_request/entities.py index 5e39ef79d1..5764ce725e 100644 --- a/api/core/workflow/nodes/http_request/entities.py +++ b/api/core/workflow/nodes/http_request/entities.py @@ -68,7 +68,22 @@ class HttpRequestNodeData(BaseNodeData): Code Node Data. """ - method: Literal["get", "post", "put", "patch", "delete", "head"] + method: Literal[ + "get", + "post", + "put", + "patch", + "delete", + "head", + "options", + "GET", + "POST", + "PUT", + "PATCH", + "DELETE", + "HEAD", + "OPTIONS", + ] url: str authorization: HttpRequestNodeAuthorization headers: str diff --git a/api/core/workflow/nodes/http_request/executor.py b/api/core/workflow/nodes/http_request/executor.py index 11842d58b1..941a0cb078 100644 --- a/api/core/workflow/nodes/http_request/executor.py +++ b/api/core/workflow/nodes/http_request/executor.py @@ -37,7 +37,22 @@ BODY_TYPE_TO_CONTENT_TYPE = { class Executor: - method: Literal["get", "head", "post", "put", "delete", "patch"] + method: Literal[ + "get", + "head", + "post", + "put", + "delete", + "patch", + "options", + "GET", + "POST", + "PUT", + "PATCH", + "DELETE", + "HEAD", + "OPTIONS", + ] url: str params: list[tuple[str, str]] | None content: str | bytes | None @@ -249,7 +264,22 @@ class Executor: """ do http request depending on api bundle """ - if self.method not in {"get", "head", "post", "put", "delete", "patch"}: + if self.method not in { + "get", + "head", + "post", + "put", + "delete", + "patch", + "options", + "GET", + "POST", + "PUT", + "PATCH", + "DELETE", + "HEAD", + "OPTIONS", + }: raise InvalidHttpMethodError(f"Invalid http method {self.method}") request_args = { @@ -266,7 +296,7 @@ class Executor: } # request_args = {k: v for k, v in request_args.items() if v is not None} try: - response = getattr(ssrf_proxy, self.method)(**request_args) + response = getattr(ssrf_proxy, self.method.lower())(**request_args) except (ssrf_proxy.MaxRetriesExceededError, httpx.RequestError) as e: raise HttpRequestNodeError(str(e)) # FIXME: fix type ignore, this maybe httpx type issue