feat(workflow): enhance HTTP request node with curl debugging support
This commit is contained in:
@@ -256,6 +256,7 @@ class HttpRequestNode(BaseNode):
|
|||||||
return {}
|
return {}
|
||||||
case HttpContentType.JSON:
|
case HttpContentType.JSON:
|
||||||
content["json"] = json.loads(self._render_template(
|
content["json"] = json.loads(self._render_template(
|
||||||
|
self.typed_config.body.data, variable_pool
|
||||||
))
|
))
|
||||||
|
|
||||||
case HttpContentType.FROM_DATA:
|
case HttpContentType.FROM_DATA:
|
||||||
@@ -343,18 +344,11 @@ class HttpRequestNode(BaseNode):
|
|||||||
- str: Branch identifier (e.g. "ERROR") when branching is enabled
|
- str: Branch identifier (e.g. "ERROR") when branching is enabled
|
||||||
"""
|
"""
|
||||||
self.typed_config = HttpRequestNodeConfig(**self.config)
|
self.typed_config = HttpRequestNodeConfig(**self.config)
|
||||||
|
|
||||||
# Build request components
|
|
||||||
headers = self._build_header(variable_pool) | self._build_auth(variable_pool)
|
|
||||||
params = self._build_params(variable_pool)
|
|
||||||
content = await self._build_content(variable_pool)
|
|
||||||
url = self._render_template(self.typed_config.url, variable_pool)
|
|
||||||
|
|
||||||
async with httpx.AsyncClient(
|
async with httpx.AsyncClient(
|
||||||
verify=self.typed_config.verify_ssl,
|
verify=self.typed_config.verify_ssl,
|
||||||
timeout=self._build_timeout(),
|
timeout=self._build_timeout(),
|
||||||
headers=headers,
|
headers=self._build_header(variable_pool) | self._build_auth(variable_pool),
|
||||||
params=params,
|
params=self._build_params(variable_pool),
|
||||||
follow_redirects=True
|
follow_redirects=True
|
||||||
) as client:
|
) as client:
|
||||||
retries = self.typed_config.retry.max_attempts
|
retries = self.typed_config.retry.max_attempts
|
||||||
@@ -362,8 +356,8 @@ class HttpRequestNode(BaseNode):
|
|||||||
try:
|
try:
|
||||||
request_func = self._get_client_method(client)
|
request_func = self._get_client_method(client)
|
||||||
resp = await request_func(
|
resp = await request_func(
|
||||||
url=url,
|
url=self._render_template(self.typed_config.url, variable_pool),
|
||||||
**content
|
**(await self._build_content(variable_pool))
|
||||||
)
|
)
|
||||||
resp.raise_for_status()
|
resp.raise_for_status()
|
||||||
logger.info(f"Node {self.node_id}: HTTP request succeeded")
|
logger.info(f"Node {self.node_id}: HTTP request succeeded")
|
||||||
@@ -372,7 +366,7 @@ class HttpRequestNode(BaseNode):
|
|||||||
body=response.body,
|
body=response.body,
|
||||||
status_code=resp.status_code,
|
status_code=resp.status_code,
|
||||||
headers=resp.headers,
|
headers=resp.headers,
|
||||||
files=response.files,
|
files=response.files
|
||||||
).model_dump()
|
).model_dump()
|
||||||
except (httpx.HTTPStatusError, httpx.RequestError) as e:
|
except (httpx.HTTPStatusError, httpx.RequestError) as e:
|
||||||
logger.error(f"HTTP request node exception: {e}")
|
logger.error(f"HTTP request node exception: {e}")
|
||||||
@@ -394,11 +388,5 @@ class HttpRequestNode(BaseNode):
|
|||||||
logger.warning(
|
logger.warning(
|
||||||
f"Node {self.node_id}: HTTP request failed, switching to error handling branch"
|
f"Node {self.node_id}: HTTP request failed, switching to error handling branch"
|
||||||
)
|
)
|
||||||
return {
|
return {"output": "ERROR"}
|
||||||
"output": "ERROR",
|
|
||||||
"body": "",
|
|
||||||
"status_code": 500,
|
|
||||||
"headers": {},
|
|
||||||
"files": [],
|
|
||||||
}
|
|
||||||
raise RuntimeError("http request failed")
|
raise RuntimeError("http request failed")
|
||||||
|
|||||||
Reference in New Issue
Block a user