
Show HN: HTTP Status as a Service - gee_totes
https://status.icu/
======
stirner
> status.icu will return whatever https status code you want! Use a GET
> request to any status.icu path to guarantee an HTTP status code.
    
    
        $ curl -I https://status.icu/418/
        HTTP/1.1 500 Internal Server Error 
    

The Nginx configuration responsible for the service[1] just hardcodes a
handful of common HTTP status codes. A Go version that supports any status
code takes fewer lines than status.icu's nginx.conf, even after gofmt.[2] Not
that I think anyone should be relying on a third-party service for "writing
browser integration tests" OR "mocking API responses".

[1]
[https://gist.github.com/geetotes/0ddc96f95eecab4e8aa8dd53bcc...](https://gist.github.com/geetotes/0ddc96f95eecab4e8aa8dd53bcc70661)

[2]
[https://gist.github.com/wwalexander/febbc1ba76c8eafa9f94f5cb...](https://gist.github.com/wwalexander/febbc1ba76c8eafa9f94f5cb2573b34d)

~~~
joshmn
Here's[1] a two-liner with Rack

[1]
[https://gist.github.com/joshmn/66f715c65bc19784f95a0e2ce3c9d...](https://gist.github.com/joshmn/66f715c65bc19784f95a0e2ce3c9df93)

~~~
andymcsherry
It’s a bit disingenuous to call it that. 140 characters on one line that most
people would format very differently.

~~~
quickthrower2
I'd say this comment is a tad unfair.

Most "one liners" fall under the category "most people would format very
differently"

And this one at only 140 chars (a classic tweet)

------
tlrobinson

        require("express")().get("/:status", (req, res) => res.status(req.params.status).end()).listen(80)

~~~
brod
gotta add a NaN check in there or it'll hang

~~~
abrkn

            require("express")().get("/:status", (req, res) => res.status(+req.params.status || 400).end()).listen(80)

~~~
kaoD
You just broke my HTTP status 0.

------
hamandcheese
See also: httpbin, which comes with a ton of other handy features as well.

[http://httpbin.org/#/Status_codes](http://httpbin.org/#/Status_codes)

~~~
recentdarkness
[https://httpbin.org/](https://httpbin.org/) Was exactly my first thought

------
xurukefi
There is an XSS vuln on the website. Try entering something like '<b>test</b>'
or '<script>alert('test');</script>" into the text box.

~~~
uniformlyrandom
That explains why it is blocked on my enterprise network.

~~~
Cub3
But how would it know there's an XSS vuln?

------
dmlittle
I built something similar about a year ago experimenting with AWS's API
Gateway. [https://mock.codes/](https://mock.codes/) The landing page is an S3
file, and everything is just API Gateway configs.

There used to be a similar service hosted on the same domain that eventually
went dead. I bought the domain and brought up this service again. It barely
gets used (haven't checked usage in a while) but I've already paid for the
domain and it costs me pennies to keep it up and running.

------
Gobd
I've used [https://httpstat.us/](https://httpstat.us/) which seems to offer
the same features plus configurable delay, although when you hit it 3,000
times a second it doesn't necessarily respond with the code you ask for.

~~~
benatkin
I think the proper term is "status code". Simply using the word "status" by
itself is ambiguous and misleading. So any new entrants to this space could
choose from a lot of domain suffixes: status.codes, statusco.de,
statuscode.info, etc...

------
Boulth
Also [https://http.cat](https://http.cat)

------
Fej
Does not support IoT kettles. Fatal flaw.

(Response code 418.)

~~~
whatsstolat
Heresy! A kettle is not a teapot.

------
fluxsauce
Neat! I wrote a similar project for Drupal once -
[https://www.drupal.org/project/generate_errors](https://www.drupal.org/project/generate_errors)
\- I found it to be a good way to learn about HTTP status codes and their
meanings. Currently, you've got a finite list of HTTP status codes and don't
have definitions. You may want to consider grouping them and including labels.
Or don't, I'm just some guy on the internet :-)

Cool project!

------
dweekly
[https://status.party/422/](https://status.party/422/) is NXDOMAIN, not sure
that was the error you intended. ;-)

~~~
dmlittle
I think it might have been .party originally but was later changed to .icu

------
quickthrower2
:-( No teapot support (418)

------
greglindahl
Arbitrary status codes from your webserver is extremely useful for testing
your nginx or other reverse-proxy configuration. If your webserver is
returning 500s, does nginx retry in an infinite loop? Not good!

Better: if a query causes your webserver to crash, does nginx crash ALL of
them while retrying that bad query? :-)

------
sirsuki
No CORS support. That seems silly.

------
Walkman
why on earth would I want this instead of a local service if I absolutely need
(which I don't with clean architecture and clean code)

------
alex_suzuki
httpbin is way more powerful than this...

[https://httpbin.org/](https://httpbin.org/)

------
7ewis
Pretty useful. Was writing a script yesterday to log website availability
including the HTTP status of the site.

This will be useful to make sure my script works correctly!

------
doughj3
Should add 204, useful for frame-busting busting:
[https://blog.codinghorror.com/we-done-been-
framed/](https://blog.codinghorror.com/we-done-been-framed/)

------
est
wait, .icu is a tld??

~~~
jwilk
[https://icannwiki.org/.icu](https://icannwiki.org/.icu) says "General
Availability: 29 May 2018".

------
hidiegomariani
I wonder what is the incentive to keep it up and running

~~~
klez
Doing something nice for other developers, I guess.

Unless you mean "what guarantees do I have that if I integrate this in my
workflow it won't be gone tomorrow?". In which case, I agree.

------
avip
For developers who never heard of httpbin.org

------
anonlastname
Sounds exactly like httpstat.us

