fix: where HTTP node URL, JSON text, and raw text template rendering could not find the corresponding rendering variables (#745)

This commit is contained in:
Zhj
2025-08-15 11:25:27 +08:00
committed by GitHub
parent ff00dcb31b
commit 4ff734f15f
5 changed files with 765 additions and 33 deletions

View File

@@ -360,6 +360,11 @@ type HTTPRequester struct {
md5FieldMapping MD5FieldMapping
}
func adaptTemplate(template string) string {
return globalVariableReplaceRegexp.ReplaceAllString(template, "global_variable_$1.$2")
}
func (hg *HTTPRequester) Invoke(ctx context.Context, input map[string]any) (output map[string]any, err error) {
var (
req = &Request{}
@@ -380,7 +385,7 @@ func (hg *HTTPRequester) Invoke(ctx context.Context, input map[string]any) (outp
Header: http.Header{},
}
httpURL, err := nodes.TemplateRender(hg.urlConfig.Tpl, req.URLVars)
httpURL, err := nodes.TemplateRender(adaptTemplate(hg.urlConfig.Tpl), req.URLVars)
if err != nil {
return nil, err
}
@@ -524,7 +529,7 @@ func (b *BodyConfig) getBodyAndContentType(ctx context.Context, req *Request) (i
switch b.BodyType {
case BodyTypeJSON:
jsonString, err := nodes.TemplateRender(b.TextJsonConfig.Tpl, req.JsonVars)
jsonString, err := nodes.TemplateRender(adaptTemplate(b.TextJsonConfig.Tpl), req.JsonVars)
if err != nil {
return nil, contentType, err
}
@@ -539,7 +544,7 @@ func (b *BodyConfig) getBodyAndContentType(ctx context.Context, req *Request) (i
body = strings.NewReader(form.Encode())
contentType = ContentTypeFormURLEncoded
case BodyTypeRawText:
textString, err := nodes.TemplateRender(b.TextPlainConfig.Tpl, req.TextPlainVars)
textString, err := nodes.TemplateRender(adaptTemplate(b.TextPlainConfig.Tpl), req.TextPlainVars)
if err != nil {
return nil, contentType, err
}
@@ -632,7 +637,7 @@ func (hg *HTTPRequester) ToCallbackInput(_ context.Context, input map[string]any
result := make(map[string]any)
result["method"] = hg.method
u, err := nodes.TemplateRender(hg.urlConfig.Tpl, request.URLVars)
u, err := nodes.TemplateRender(adaptTemplate(hg.urlConfig.Tpl), request.URLVars)
if err != nil {
return nil, err
}
@@ -666,7 +671,7 @@ func (hg *HTTPRequester) ToCallbackInput(_ context.Context, input map[string]any
result["body"] = nil
switch hg.bodyConfig.BodyType {
case BodyTypeJSON:
js, err := nodes.TemplateRender(hg.bodyConfig.TextJsonConfig.Tpl, request.JsonVars)
js, err := nodes.TemplateRender(adaptTemplate(hg.bodyConfig.TextJsonConfig.Tpl), request.JsonVars)
if err != nil {
return nil, err
}
@@ -677,7 +682,7 @@ func (hg *HTTPRequester) ToCallbackInput(_ context.Context, input map[string]any
}
result["body"] = ret
case BodyTypeRawText:
tx, err := nodes.TemplateRender(hg.bodyConfig.TextPlainConfig.Tpl, request.TextPlainVars)
tx, err := nodes.TemplateRender(adaptTemplate(hg.bodyConfig.TextPlainConfig.Tpl), request.TextPlainVars)
if err != nil {
return nil, err
@@ -729,7 +734,7 @@ func (hg *HTTPRequester) parserToRequest(input map[string]any) (*Request, error)
if strings.HasPrefix(urlKey, "global_variable_") {
urlKey = globalVariableReplaceRegexp.ReplaceAllString(urlKey, "global_variable_$1.$2")
}
nodes.SetMapValue(request.URLVars, strings.Split(urlKey, "."), value.(string))
nodes.SetMapValue(request.URLVars, strings.Split(urlKey, "."), value)
}
}
if strings.HasPrefix(key, headersPrefix) {
@@ -777,7 +782,6 @@ func (hg *HTTPRequester) parserToRequest(input map[string]any) (*Request, error)
if formDataKey, ok := hg.md5FieldMapping.BodyMD5Mapping[formDataMd5Key]; ok {
request.FormDataVars[formDataKey] = value.(string)
}
}
if strings.HasPrefix(bodyKey, bodyFormURLEncodedPrefix) {