mirror of
https://github.com/eolinker/apinto
synced 2025-12-24 13:28:15 +08:00
修复当响应分块传输时,日志变量response获取数据失败的问题
This commit is contained in:
@@ -3,6 +3,7 @@ package plugin_manager
|
||||
import (
|
||||
"fmt"
|
||||
"github.com/eolinker/eosc"
|
||||
"github.com/eolinker/eosc/log"
|
||||
"github.com/eolinker/eosc/variable"
|
||||
"reflect"
|
||||
)
|
||||
@@ -17,7 +18,7 @@ type PluginWorkerConfig struct {
|
||||
Plugins []*PluginConfig `json:"plugins" yaml:"plugins"`
|
||||
}
|
||||
|
||||
//PluginConfig 全局插件配置
|
||||
// PluginConfig 全局插件配置
|
||||
type PluginConfig struct {
|
||||
Name string `json:"name" yaml:"name" `
|
||||
ID string `json:"id" yaml:"id"`
|
||||
@@ -71,7 +72,8 @@ func (p *PluginConfig) Reset(originVal reflect.Value, targetVal reflect.Value, v
|
||||
|
||||
cfgType, err := p.GetType(originVal)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
log.Errorf("PluginConfig Reset get type error: %v", err)
|
||||
return nil, nil
|
||||
}
|
||||
usedVariables := make([]string, 0, variables.Len())
|
||||
targetType := targetVal.Type()
|
||||
|
||||
@@ -16,7 +16,7 @@ import (
|
||||
|
||||
var (
|
||||
errConfig = errors.New("invalid config")
|
||||
ErrorDriverNotExit = errors.New("drive not exit")
|
||||
ErrorDriverNotExist = errors.New("driver not exist")
|
||||
ErrorGlobalPluginMastConfig = errors.New("global must have config")
|
||||
ErrorGlobalPluginConfigInvalid = errors.New("invalid global config")
|
||||
)
|
||||
@@ -171,7 +171,8 @@ func (p *PluginManager) check(conf interface{}) (Plugins, error) {
|
||||
log.DebugF("new plugin:%d=>%v", i, cf)
|
||||
newPlugin, err := p.newPlugin(cf)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
log.Error("new plugin error:", err)
|
||||
continue
|
||||
}
|
||||
plugins = append(plugins, newPlugin)
|
||||
}
|
||||
|
||||
@@ -50,7 +50,7 @@ func (p *PluginManager) getExtenderDriver(config *PluginConfig) (eosc.IExtenderD
|
||||
log.DebugF("getExtenderDriver:%p.get(%v)", p, config)
|
||||
driverFactory, has := p.extenderDrivers.GetDriver(config.ID)
|
||||
if !has {
|
||||
return nil, fmt.Errorf("id:%w", ErrorDriverNotExit)
|
||||
return nil, fmt.Errorf("id:%w", ErrorDriverNotExist)
|
||||
}
|
||||
return driverFactory.Create("plugin@setting", config.Name, config.Name, config.Name, config.InitConfig)
|
||||
}
|
||||
|
||||
@@ -4,6 +4,7 @@ import (
|
||||
"bytes"
|
||||
"compress/gzip"
|
||||
"fmt"
|
||||
"github.com/eolinker/eosc/log"
|
||||
"io"
|
||||
"net/url"
|
||||
"os"
|
||||
@@ -270,7 +271,32 @@ var (
|
||||
|
||||
"response": Fields{
|
||||
"": ReadFunc(func(name string, ctx http_service.IHttpContext) (interface{}, bool) {
|
||||
return ctx.Response().String(), true
|
||||
builder := &strings.Builder{}
|
||||
err := ctx.Response().Headers().Write(builder)
|
||||
if err != nil {
|
||||
log.Errorf("write response headers error: %v", err)
|
||||
return "", false
|
||||
}
|
||||
body := ctx.Response().GetBody()
|
||||
encoding := ctx.Response().Headers().Get("Content-Encoding")
|
||||
if encoding == "gzip" {
|
||||
reader, err := gzip.NewReader(bytes.NewReader(body))
|
||||
if err != nil {
|
||||
return "", false
|
||||
}
|
||||
defer reader.Close()
|
||||
data, err := io.ReadAll(reader)
|
||||
if err != nil {
|
||||
return "", false
|
||||
}
|
||||
body = data
|
||||
}
|
||||
_, err = builder.Write(body)
|
||||
if err != nil {
|
||||
log.Errorf("write response body error: %v", err)
|
||||
return "", false
|
||||
}
|
||||
return builder.String(), true
|
||||
}),
|
||||
"body": Fields{
|
||||
"": ReadFunc(func(name string, ctx http_service.IHttpContext) (interface{}, bool) {
|
||||
|
||||
Reference in New Issue
Block a user