buger / goreplay

GoReplay is an open-source tool for capturing and replaying live HTTP traffic into a test environment in order to continuously test your system with real data. It can be used to increase confidence in code deployments, configuration changes and infrastructure changes.
https://goreplay.org
Other
18.42k stars 4 forks source link

I want to stop forwarding of a specific request path #1237

Open ohs30359-nobuhara opened 5 months ago

ohs30359-nobuhara commented 5 months ago

I am currently using goreplay to forward requests to a REST API that provides the following endpoints:

My goal is to forward all requests except for the [POST] /users/${ID} endpoint. Unfortunately, the existing options --http-allow-method and --http-allow-url do not fully meet this requirement.

Is there any way to meet this requirement?

dosubot[bot] commented 5 months ago

🤖

Yes, you can configure GoReplay to forward all requests except for the [POST] /users/${ID} endpoint by using the --http-disallow-url option. This option allows you to specify a regular expression that matches the URLs you want to exclude from forwarding.

Here is the command you can use:

gor --input-raw :8080 --output-http staging.com --http-disallow-url "/users/.*"

This command will forward all requests except those sent to the /users/${ID} endpoint. The regular expression /users/.* matches any URL that starts with /users/ followed by any characters, effectively excluding all URLs of the form /users/${ID}.

You can find more information about request filtering in GoReplay in the Request Filtering section of the GoReplay wiki.

Also, I can confirm that the current version of GoReplay (v1.3.3) does support the --http-disallow-url option. This is evident from the HTTPModifierConfig struct in the GoReplay source code, which has a field named URLNegativeRegexp that is annotated with json:"http-disallow-url". This annotation is used for mapping the JSON configuration field http-disallow-url to the Go struct field URLNegativeRegexp.

Here is the relevant code:

type HTTPModifierConfig struct {
    URLNegativeRegexp      HTTPURLRegexp              `json:"http-disallow-url"`
    // other fields...
}

This means that when GoReplay is parsing the configuration, it will recognize the http-disallow-url option and map it to the URLNegativeRegexp field in the HTTPModifierConfig struct. You can find this in the http_modifier_settings.go file in the GoReplay repository.

I hope this helps! If you have any other questions, feel free to ask.

Sources


This response is meant to be useful and save you time. It is not meant to be a precise solution, but rather a starting point for your own research.

Help me be more useful! Please leave a 👍 if this is helpful and 👎 if it is irrelevant.

If you want to continue the conversation, start your reply with @dosu-bot.

ohs30359-nobuhara commented 5 months ago

This proposal does not meet the requirements. While control at the path level is indeed possible, it is not feasible at the method level.