apisix-go-plugin-runner icon indicating copy to clipboard operation
apisix-go-plugin-runner copied to clipboard

request help: Need to rewrite the http request method

Open SherrillJoyceGit opened this issue 1 year ago • 3 comments

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

  • APISIX Go Plugin Runner's version: v0.5.0
  • APISIX version: v3.6.0
  • Go version: 1.19.5
  • OS (cmd: uname -a): Linux localhost.localdomain 3.10.0-862.el7.x86_64 #1 SMP Fri Apr 20 16:44:24 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux

SherrillJoyceGit avatar Nov 06 '23 07:11 SherrillJoyceGit

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

SherrillJoyceGit avatar Nov 09 '23 08:11 SherrillJoyceGit

我最近实验修改重写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

thinkdb1 avatar Nov 16 '23 06:11 thinkdb1

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

  • Update github.com/api7/ext-plugin-proto to v0.6.1
  • Add SetBody([]byte) to http.Request
  • Add a sample request body rewrite plugin
  • Add an e2e test for the sample request body rewrite plugin
  • Lint some code and add items (e.g. .vscode, go.work) to .gitignore

TomCN0803 avatar Nov 19 '23 15:11 TomCN0803