Hi guys so I’m using UDG here and I want to modify the client’s query (located in request body) in pre Go plugin. Can we do that there? Maybe , you can show me an example?
When I tried to modify the body request in the pre-request plugin , the Tyk returned an error ‘Error while unmarshalling GraphQL: the provided request is empty’.
Olu
March 23, 2023, 7:04pm
2
Not tried this. Would try and let you know how it goes.
Ubong
March 31, 2023, 3:28pm
3
Hi @midnight ,
I wonder if you’ve resolved this.
Can you share your plugin code, so we take a look ?
Hi, i have resolved this issue. I think previously I made some mistake when marshalling the query string :D. When i tried it again it works
const modifiedReq = `{"query":"query testMultipleEndpoint { getUser(id: 0) { user { name id status pokebag{ pokemons{ name } error { code message path } } } error{ code message path } } getPokemon(userid:0){ pokemons{ name user_id } error{ code message path } } }","variables":null,"operationName":"testMultipleEndpoint"}`
func ModifyReqQueryX(rw http.ResponseWriter, r *http.Request) {
logger.Info("=== ModifyReqQueryX ===")
//req is the query request
b, err := io.ReadAll(r.Body)
if err != nil {
log.Get().Fatal(err)
}
logger.Info("Request: ", string(b))
// overwrite our req body and update the content length
newReqByte := []byte(modifiedReq)
var buf bytes.Buffer
buf.Write(newReqByte)
r.Body = ioutil.NopCloser(&buf)
r.Header.Set("Content-Length", fmt.Sprint(len(newReqByte)))
}
1 Like
tomshy
October 9, 2023, 8:16am
5
Why am I getting the following error even after setting the Content-Length header to the len of the new request?
http: proxy error: http: ContentLength=2607 with Body length 2636
I think there is something wrong when you process the length of the new request. Because the content length and body length should be the same
1 Like
tomshy
October 12, 2023, 8:57am
7
using r.ContentLength = int64((len(newReqByte)))
was the hack
1 Like