Skip to content
Docs menu · Troubleshooting

Troubleshooting

Fix a rule or breakpoint that never fires or holds too much

On this page

Most rules and breakpoints that never fire point at the wrong host or path, or are switched off. Work down each list in order.

A rule never fires

  1. Check the rule's switch in the rules pane. A rule that is switched off matches nothing.

  2. Check that the rule is under the host filter you send requests to. A rule applies only to its own host filter's host, whatever the sidebar has selected. All traffic cannot hold a rule. The port does not matter: a host filter for api.example.com also covers api.example.com:8443.

  3. Check Method in the rule sheet. Any matches all methods, and GET, POST, PUT, PATCH or DELETE limits the rule to that one. Rules made before ReqRes 1.1 were set to Any. Protocol does not limit a rule: it answers http:// and https:// alike.

  4. Test the path with the ? button beside the rule's URL field. These 4 patterns look right but never fire:

    • a regex that starts with ^;
    • a regex that does not start with /;
    • the host typed into the path;
    • a wildcard path that stops before the query. /search does not match /search?q=x, so write /search*.

    See Write a URL pattern that matches.

  5. Check that the request reaches ReqRes, which means it is in the traffic list. Browsers and Electron apps never send localhost, 127.0.0.1 or ::1 to a proxy, and a terminal set up with the environment lines skips them. See Requests to a local server are missing.

  6. Check the certificate. A rule changes HTTPS only when the ReqRes CA is installed and trusted. Rows marked "not decrypted" or "SSL pinned" are relayed, so no rule applies to them.

  7. Check Settings ▸ Capture ▸ Excluded from interception. ReqRes never changes an excluded host, over https:// or http://.

  8. Switch off the other rules for that host. ReqRes applies at most 1 rule to a request, the first enabled rule that matches, so another rule for that host can win.

  9. For a Map Local rule, check that its file is still where you chose it. If ReqRes cannot read the file, the request goes on to the server, and the server's response comes back unchanged.

A rule changes more than you set

A rule changes a response only as far as its own fields say. If an Extend rule turns a 404 into a 200, or every response it matches now says it is JSON, check its response side:

  1. Right-click the rule and choose Edit override....
  2. Under Response, read Status. On an Extend rule, Keep server's status keeps the server's own status. A code you choose replaces it on every response the rule matches, a 404 or a 500 included. An Override rule always answers with its own status. A Map Local rule has no Status: its file answers as 200 OK.
  3. Click Edit… beside the response Headers. A header there replaces the server's header of the same name, so a Content-Type on an Extend rule relabels every response it matches. A new Override starts with Content-Type: application/json; charset=utf-8. Change it for anything but JSON.
  4. Click Save.

Rules made before ReqRes 1.1 can carry status 200 and that JSON Content-Type in any mode. On its first launch, ReqRes 1.1 resets an Extend rule that sets request headers and still has the old sheet's response: status 200, that header alone and no body. The rule then keeps the server's status and headers. ReqRes also takes that header off a Map Local rule whose only response header it is. Check any other older rule with the steps above.

A breakpoint never fires

  1. Read the line at the top of Settings ▸ Breakpoints. It says how many breakpoints are armed. Each breakpoint also has its own switch.
  2. Check Host. Enter an exact host, such as api.example.com or localhost, or *.example.com for its subdomains. *.example.com does not hold example.com itself. A port is dropped, so api.example.com also holds requests to api.example.com:8443.
  3. Check Path contains and Methods. Path contains is plain text, found anywhere in the path or query. It is not a pattern, so wildcards and regular expressions do not work there.
  4. Check that the request reaches ReqRes. Breakpoints hold HTTPS and plain http:// requests alike, but only requests in the traffic list. A request to localhost from a browser, or from a terminal set up with the environment lines, skips ReqRes.
  5. Check Settings ▸ Capture ▸ Excluded from interception. ReqRes never holds an excluded host. It never holds a connection marked "SSL pinned" either.
  6. Check the certificate. A breakpoint can hold an HTTPS request only while the ReqRes CA is installed and trusted. Plain http:// needs no certificate.
  7. Check that ReqRes is receiving capture. While it reconnects to a capture that kept running without it, or while the traffic list says "Capture is on, but ReqRes isn't receiving it", a matching request goes through unheld, because nobody could answer it. A request held before ReqRes went away comes back to the panel once ReqRes reconnects, with what is left of its 60 seconds. See ReqRes quit while capturing.

Too much is held

A breakpoint with Path contains empty and Any method selected holds all requests to its host, including images, fonts and analytics pings.

  1. Open Settings ▸ Breakpoints.
  2. Click Turn All Off, beside the armed count. With no breakpoint armed, ReqRes sends the held requests on unchanged.
  3. Click Remove beside the breakpoint. A breakpoint cannot be edited.
  4. Add it again with Path contains, a method, or both, and click Add Breakpoint. A new breakpoint is armed as soon as you add it.

Switching off one breakpoint while others stay armed does not release the requests it already holds. Answer them in the Paused Requests panel. Resume All appears there when more than 1 request is held. Closing the panel does the same: "Closing this panel resumes everything held, untouched."

A page hangs and no panel shows

A held request stops the app that sent it. A page stays blank, or an app shows a spinner.

  1. Click ReqRes in the Dock. The Paused Requests panel does not take the keyboard or bring ReqRes forward, so it is easy to miss. While ReqRes is in the background, its Dock icon bounces when a request is held.
  2. Or open the ReqRes menu bar menu. It shows how many requests are held and how long is left, with Resume All.
  3. Answer the request, or leave it. After 60 seconds, ReqRes sends it on unchanged.

The app that sent the request can have a shorter timeout of its own. It may give up before ReqRes sends the request on. See Hold a request with a breakpoint.