Request Tester
Build and send HTTP requests via proxy — import/export cURL, edit headers, cookies and body
Your script gets a 403, or HTML that doesn't match what you see in the browser, and you need to know why. Send the exact request from here — with your own headers, cookies and proxy — and read the raw response, the redirect chain, and the name of the anti-bot system that answered.
Add proxies in Proxy Manager below
How to use
- 1Start from the request that already works — Open DevTools on the page, right-click the request, Copy as cURL, and paste it on the cURL tab. URL, method, headers, cookies and body are filled in for you. Both Chrome styles work: bash and the Windows cmd caret format. Filling the fields by hand works too.
- 2Choose where the request goes out from — Use the built-in proxies or add your own — HTTP, SOCKS4, SOCKS5, with or without auth. When a site has already blocked one address, swapping the proxy is often the whole experiment.
- 3Send it and read the whole answer — Status code, response headers, body, and the full 301/302 chain. If Cloudflare, DataDome or PerimeterX answered instead of the site, the result says so by name.
- 4Change one thing, send again — A User-Agent, one cookie, a different proxy — one change at a time. The difference between the two responses is the answer to why your code is blocked and your browser is not.
- 5Take the working request back to your code — The cURL tab regenerates a runnable command from the current state at any moment. Paste it into cURL Converter to get Python, Node, Go or PHP with the same headers.
Examples
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36GET https://example.com -> detected: DataDomeGET https://example.com (body arrives without the price block)GET https://example.com/api/v1/items?page=2socks5://user:pass@host:1080curl 'https://example.com' -H 'cookie: session=...' -H 'accept-language: en-US'Cookie: session_id=abc123; consent=1; ab_group=bGET http://bit.ly/xxxx (Follow redirects: on)When to use for web scraping
The most common question when writing a scraper is "why does my code get something different from what I see in the browser?" There are three real answers: the page builds its content with JavaScript, the site serves different content by User-Agent or cookies, or an anti-bot system answered instead of the site. One request from here shows which of the three you have. Naming the anti-bot system is the part that is hard to get anywhere else. When Cloudflare, DataDome or PerimeterX intercepts the request, you usually see a bare 403 with no explanation. Here the result names the system, and that decides your next step: one of them lets you through with a User-Agent and a session cookie, another fingerprints the TLS handshake and no header will help. Requests go out through a proxy — the built-in ones or your own — not from your own address. That is not only about anonymity: half the trouble in scraping lives in the proxy itself, and a request is worth testing through the same address your real code will use. What this does not do: it does not run JavaScript. If the content appears only after the page's scripts execute, the raw response will not contain it, and no combination of headers will change that — you need Playwright, Puppeteer or a cloud browser. That is a real answer too, and getting it in one request is better than discovering it after a day of parser work. Once the response is in hand, CSS Selector Tester and XPath Tester are the next stop for pulling data out of it.