apache / apisix-go-plugin-runner

Go Plugin Runner for APISIX
https://apisix.apache.org/
Apache License 2.0
167 stars 69 forks source link

request help: Need to rewrite the http request method #148

Open SherrillJoyceGit opened 8 months ago

SherrillJoyceGit commented 8 months ago

Issue description

I need to rewrite the http request method. I think about two ways, but both failed. Way 1. Add a method like "(r *Request) SetPath". As a result , I add a method to Request and call hrc.Req. MutateMethod. It only changes the object of Request.r and does not change the buffer object(generated by flatbuffer which is a rpc solution of google). The program just use the content of buffer object to call the upstream api.

Way 2. Based on way1 , there is no function at HTTPReqCall.Rewrite to change the method. I try to use functions of HTTPReqCall.Req to rebuild the buffer. It does't work and lua problems occurred !

Why:

We have some apis using the Get methods, and the client only use POST methods that can't be changed. Client -> Method(POST) -> configuration in plugins -> Go Runner Plugin -> Method(GET) -> Upstream

screenshots: image

Environment

SherrillJoyceGit commented 8 months ago

Finally,I do the request method change by writing a lua plugin.

thinkdb1 commented 7 months ago

我最近实验修改重写body时,获得一点思路,虽然没有实验希望可以帮到你: 在apisix-core-with-plugin/internal/http/request.go中的(r Request) FetchChanges(id uint32, builder flatbuffers.Builder)的方法里面的hrc.RewriteStart(builder)下面,添加hrc.ReqAddMethod()这个方法,是不是可以实现重写method的方法,因为我加入hrc.RewriteAddBody这个方法后,可以重写body。当然前面要自己定义相关判断是否修改method

TomCN0803 commented 7 months ago

I've started a pull request: #151 Features and modifications includes: