Skip to main content

HTTP Message Body Rewriting

Message body rewriting allows users to modify the body of HTTP requests or responses that match specific URLs. It supports two methods: regex replacement and jq filters. MITM decryption is required to modify HTTPS traffic.

Regex Replacement​

Find and replace content in the message body using regular expressions.

Request Body Regex Replacement (request_regex)​

  • match (string), required

    A regular expression for URL matching.

  • find (string), required

    A regular expression to search for in the message body. Capture groups are supported.

  • replace (string), required

    The replacement content. Supports referencing capture groups with $1, $2, etc.

  • disabled (bool), optional

    Whether to disable this rule.

Response Body Regex Replacement (response_regex)​

The fields are the same as request body regex replacement, but apply to the response body.

body_rewrites:
- response_regex:
match: "^https://api\\.example\\.com/data"
find: '"status":\s*"pending"'
replace: '"status": "completed"'
- request_regex:
match: "^https://api\\.example\\.com/submit"
find: '"version":\s*"1.0"'
replace: '"version": "2.0"'

jq Filter​

Use jq expressions to process JSON-formatted message bodies, suitable for making structured modifications to JSON data.

Request Body jq Filter (request_jq)​

  • match (string), required

    A regular expression for URL matching.

  • filter (string), required

    A jq filter expression (e.g., .data.field = "value" or del(.unwanted)).

  • disabled (bool), optional

    Whether to disable this rule.

Response Body jq Filter (response_jq)​

The fields are the same as request body jq filter, but apply to the response body.

body_rewrites:
- request_jq:
match: "^https://api\\.example\\.com/submit"
filter: '.data.timestamp = now | .data.version = "2.0"'
- response_jq:
match: "^https://api\\.example\\.com/data"
filter: 'del(.tracking) | .data.processed = true'

Configuration Example​

body_rewrites:
# Response body regex replacement
- response_regex:
match: "^https://api\\.example\\.com/data"
find: '"status":\s*"pending"'
replace: '"status": "completed"'

# Request body jq filter
- request_jq:
match: "^https://api\\.example\\.com/submit"
filter: '.data.timestamp = now | .data.version = "2.0"'

# Response body jq filter
- response_jq:
match: "^https://api\\.example\\.com/config"
filter: '.settings.theme = "dark"'