MatchReplaceRequest strings or regex
(req *http.Request)
| 319 | |
| 320 | // MatchReplaceRequest strings or regex |
| 321 | func (p *Proxy) MatchReplaceRequest(req *http.Request) error { |
| 322 | // lazy mode - dump request |
| 323 | reqdump, err := httputil.DumpRequest(req, true) |
| 324 | if err != nil { |
| 325 | return err |
| 326 | } |
| 327 | |
| 328 | // lazy mode - ninja level - elaborate |
| 329 | m := make(map[string]interface{}) |
| 330 | m["request"] = string(reqdump) |
| 331 | for _, expr := range p.options.RequestMatchReplaceDSL { |
| 332 | v, err := dsl.EvalExpr(expr, m) |
| 333 | if err != nil { |
| 334 | return err |
| 335 | } |
| 336 | m["request"] = fmt.Sprint(v) |
| 337 | } |
| 338 | |
| 339 | reqbuffer := fmt.Sprint(m["request"]) |
| 340 | // lazy mode - epic level - rebuild |
| 341 | bf := bufio.NewReader(strings.NewReader(reqbuffer)) |
| 342 | requestNew, err := http.ReadRequest(bf) |
| 343 | if err != nil { |
| 344 | return err |
| 345 | } |
| 346 | // closes old body to allow memory reuse |
| 347 | _ = req.Body.Close() |
| 348 | |
| 349 | // override original properties |
| 350 | req.Method = requestNew.Method |
| 351 | req.Header = requestNew.Header |
| 352 | req.Body = requestNew.Body |
| 353 | req.URL = requestNew.URL |
| 354 | return nil |
| 355 | } |
| 356 | |
| 357 | // MatchReplaceRequest strings or regex |
| 358 | func (p *Proxy) MatchReplaceResponse(resp *http.Response) error { |