-
Notifications
You must be signed in to change notification settings - Fork 69
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
request help: support http proxy #53
Comments
|
I want to proxy all the responses. Is there any way to do that? |
I wrote a demo, but I found that the response body is empty ,For example, if I add this plugin to luacode.com, and I request a.com, the plugin will request b.com and do the processing, now the processing is successful but there is no response content from luacode.com. package plugins
import (
"encoding/json"
"fmt"
pkgHTTP "github.com/apache/apisix-go-plugin-runner/pkg/http"
"github.com/apache/apisix-go-plugin-runner/pkg/log"
"github.com/apache/apisix-go-plugin-runner/pkg/plugin"
"github.com/sirupsen/logrus"
"net/http"
"time"
)
func init() {
err := plugin.RegisterPlugin(&ForwardAuth{})
if err != nil {
log.Fatalf("failed to register plugin ForwardAuth: %s", err)
}
}
// ForwardAuth is a demo to show how to return data directly instead of proxying
// it to the upstream.
type ForwardAuth struct {
}
type ForwardAuthConf struct {
Body string `json:"body"`
}
func (p *ForwardAuth) Name() string {
return "forward-auth"
}
func (p *ForwardAuth) ParseConf(in []byte) (interface{}, error) {
conf := ForwardAuthConf{}
err := json.Unmarshal(in, &conf)
return conf, err
}
func (p *ForwardAuth) Filter(conf interface{}, w http.ResponseWriter, r pkgHTTP.Request) {
req, err := http.NewRequest("GET", "http://b.com", nil)
if err != nil {
logrus.Errorf("send request failed err:%v", err)
return
}
//req.Header.Set("Cookie", r.Header().Get("Cookie"))
client := http.Client{
Timeout: 5 * time.Second,
}
resp, err := client.Do(req)
if err != nil {
logrus.Errorf("get response failed err:%v", err)
return
}
if resp == nil {
logrus.Errorf("response is nil")
return
}
defer resp.Body.Close()
if len(resp.Header) > 0 {
for k, v := range resp.Header {
if v != nil {
w.Header().Set(k, v[0])
}
}
}
w.Header().Add("X-Resp-A6-Runner", "Go")
return
} |
1.I found that after I use core.response.set_header(k, v) then the response body of the service I requested was empty.
|
Currently, setting response data will mean stopping the current process and returning immediately without proxying the request to upstream. |
How should I change to proxy the request to upstream ? |
@GhangZh try |
Thanks, change to r.Header().Set("X-Resp-A6-Runner", "Go") solved my problem |
Issue description
I want to support the forward-auth , but how does go-pugin-runner support me to proxy the current request directly to the url, and then process the response and pass it on?
I wrote a version in lua, but our technology stack is unified with go, so I want to use go to implement
Environment
uname -a
):The text was updated successfully, but these errors were encountered: