How to Simulate Long HTTP Requests

By  on  

It happens less frequently these days but there are times when we need to accommodate for a HTTP request timing out. The service could be down, under heavy traffic, or just poorly coded, or any host of other issues.

Whenever I need to simulate a long HTTP request, I use a bit of PHP to make it happen:

<?php
        // Don't resolve this request for 5 seconds
        sleep(5);
        
        // A generic response
        echo 'This is the response!';

        // ... or hit a URL to make the case more realistic
        echo file_get_contents('https://website.tld/endpoint');
?>

With that script created, I make PHP start a server so I can make the request locally:

php -S localhost:8000

Now I can hit http://localhost:8000 and get the long request I want!

There are a number of ways you can accomplish these long form requests but this has always been a favorite of mine!

Recent Features

  • By
    CSS @supports

    Feature detection via JavaScript is a client side best practice and for all the right reasons, but unfortunately that same functionality hasn't been available within CSS.  What we end up doing is repeating the same properties multiple times with each browser prefix.  Yuck.  Another thing we...

  • By
    6 Things You Didn&#8217;t Know About Firefox OS

    Firefox OS is all over the tech news and for good reason:  Mozilla's finally given web developers the platform that they need to create apps the way they've been creating them for years -- with CSS, HTML, and JavaScript.  Firefox OS has been rapidly improving...

Incredible Demos

Discussion

  1. That’s cool! Thanks for the tip.
    I could see having it take a query param to set the sleep time arbitrarily for different scenarios you’re simulating.

  2. Charlie

    Thanks David always love your content.
    Although in this particular case i fail to understand a practical use, could you share an example?

    thanks !

  3. Dima

    And here is concise way to do it in NodeJs, the server will wait for 3 seconds before response:

    const http = require('http')
    
    const server = http.createServer((req, res) => {
      setTimeout(() => {
        res.writeHead(200)
        res.end('Hello, World!')
      }, 3000)
    })
    server.listen(8080)
    

Wrap your code in <pre class="{language}"></pre> tags, link to a GitHub gist, JSFiddle fiddle, or CodePen pen to embed!