How to manually send HTTP POST requests from Firefox or Chrome browser
System Design practice on Codemia
Work through 120+ system design problems with detailed solutions, from rate limiters to multi-region storage.
Introduction
You can send HTTP POST requests directly from any browser's developer console using the fetch() API. No extensions are needed. Open DevTools (F12 or Ctrl+Shift+I), go to the Console tab, and run a fetch() call with method: 'POST'. Both Chrome and Firefox support this out of the box. This article covers every method: console fetch, "Copy as fetch" replay, the Network tab's built-in editors, and the best extensions when you need more power.
Method 1: fetch() in the Console (Works Everywhere)
Open DevTools in any browser and paste this into the Console:
This sends a POST request to httpbin.org (a free HTTP testing service) and logs the response.
Sending Form Data
Sending URL-Encoded Data
Using async/await (Cleaner Syntax)
Method 2: Copy and Replay a Request (Chrome)
Chrome lets you capture an existing network request and replay it with modifications:
- Open DevTools (F12) and go to the Network tab.
- Perform the action that triggers the request you want to reproduce (e.g., submit a form).
- Find the request in the Network list.
- Right-click the request and select Copy > Copy as fetch.
- Go to the Console tab and paste the copied code.
- Modify the method, headers, or body as needed, then press Enter.
The copied fetch includes all cookies and headers from the original request, which is especially useful for authenticated endpoints.
Example of Copied Fetch Output
You can change the body, method, or any header and re-run it.
Method 3: Firefox Network Tab "Edit and Resend"
Firefox has a built-in request editor that Chrome does not:
- Open DevTools (F12) and go to the Network tab.
- Capture the request by performing the action.
- Right-click the request and select Edit and Resend.
- A panel opens where you can modify:
- HTTP method (GET, POST, PUT, DELETE, etc.)
- URL
- Headers
- Request body
- Click Send to execute the modified request.
- The response appears in the Network tab.
This is the fastest way to modify and replay requests without writing any code. It is a Firefox-exclusive feature.
Method 4: Chrome's "Fetch/XHR" Filter + Override
For repeated testing against the same endpoint:
- In the Network tab, filter by Fetch/XHR to see only API calls.
- Right-click any request and choose Copy > Copy as cURL (bash).
- Paste into a terminal or modify and use in the console.
Copy as cURL Example
This is useful when you need to share the exact request with a colleague or automate it in a script.
Method 5: Browser Extensions
For workflows that require saved collections, environment variables, or team sharing, use a dedicated tool:
| Extension | Browser | Key Features |
| Postman | Chrome, Edge | Collections, environments, tests, team sync |
| Thunder Client | VS Code (not a browser extension) | Lightweight, in-editor, no sign-up needed |
| Talend API Tester | Chrome | Simple UI, request history, assertions |
| RESTClient | Firefox | Minimal, fast, supports all HTTP methods |
| Hoppscotch | Any (web app: hoppscotch.io) | Open source, real-time WebSocket support |
When to Use an Extension vs. Console
Use the console when:
- You need a quick one-off request
- You want to test against the current page's cookies/session
- You are debugging CORS or cookie issues
Use an extension or standalone tool when:
- You need to save and organize requests into collections
- You test the same API endpoints repeatedly
- You need features like environment variables, pre-request scripts, or automated tests
- You work in a team and need to share request definitions
Handling CORS Issues
When sending POST requests from the console, you may encounter CORS (Cross-Origin Resource Sharing) errors:
Solutions
- Send from the correct origin. Navigate to the target site first, then use the console. Requests from the same origin bypass CORS.
- Use the "Copy as fetch" approach. Since it preserves the original request's origin and credentials, CORS issues are less likely.
- Use a proxy or standalone tool. Postman and curl do not enforce CORS because they are not browsers.
Request/Response Inspection
After sending a request from the console, inspect the full response in the Network tab:
- Send your
fetch()call in the Console. - Switch to the Network tab.
- Find the request (it will appear at the bottom of the list).
- Click on it to see:
- Headers: Request and response headers
- Payload/Request: The body you sent
- Preview: Formatted response body
- Response: Raw response body
- Timing: Connection, TTFB, and download times
Common Pitfalls
- Forgetting that console fetch uses the page's cookies. If you are on
https://example.com, your fetch call tohttps://example.com/apiwill include that site's cookies. This can be useful (testing authenticated endpoints) or problematic (accidentally performing actions as your logged-in user). - Setting
Content-Typewith FormData. When usingFormData, do NOT set theContent-Typeheader manually. The browser must set it tomultipart/form-datawith the correct boundary string. Setting it yourself will break file uploads. - Not checking the Network tab for the response.
console.logonly shows what you explicitly log. The Network tab shows the full response headers, status code, and timing. - Trying to send POST from the address bar. The address bar only sends GET requests. There is no way to change the HTTP method from the address bar.
- CORS blocking cross-origin requests. The browser enforces CORS on
fetch()calls. If you need to test a third-party API, use curl, Postman, or navigate to the API's own domain first.
Summary
- The fastest way to send a POST request from a browser is
fetch()in the DevTools console. No extensions needed. - Chrome's "Copy as fetch" lets you capture, modify, and replay any request from the Network tab.
- Firefox's "Edit and Resend" provides a GUI editor for modifying requests without writing code.
- Use
FormDatafor file uploads and form submissions. Do not manually set theContent-Typeheader with FormData. - For repeated API testing, use Postman, Thunder Client, or Hoppscotch for saved collections and team sharing.
- Always inspect responses in the Network tab for full headers, status codes, and timing information.
Related reading
- How to map a function with additional parameter using the new Dataset api in TF1.3?
- How to monitor the status of model training running on the server via fast-api
- How to monitor whether a ZeroMQ server exists?
- How to mount docker socket as volume in docker container with correct group
- How to move a domain from Godaddy to AWS Route 53
- How to omit methods from Swagger documentation on WebAPI using Swashbuckle
- How to open standard Google Map application from my application?
- How to open the Google Play Store directly from my Android application?

System Design Fundamentals
Build a strong foundation in designing scalable, reliable distributed systems.
View the courseTrack what you have practised
A free account saves your progress, solutions and study plan across every problem on Codemia.
System Design practice on Codemia
Work through 120+ system design problems with detailed solutions, from rate limiters to multi-region storage.